Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / как обратиться к значению полей грида / 25 сообщений из 61, страница 1 из 3
22.07.2004, 14:27
    #32616965
irinka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как обратиться к значению полей грида
Что-то я после VB6 не могу понять как в VB.Net как обрабится к полям грида. Мне нужно, чтобы после изменений в полях сработал такой обаботчик:
поле сумма=поле кол-во * поле цена
...
Рейтинг: 0 / 0
22.07.2004, 14:52
    #32617047
vooo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как обратиться к значению полей грида
В вашем случае можно пойти по другому пути - используя доп поле DataTable

yourTable.Columns.Add("Cost",GetType(Decimal),
"Amount*Price");


А далее отобразить его в гриде, оно будет пересчитываться....
...
Рейтинг: 0 / 0
22.07.2004, 15:03
    #32617089
irinka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как обратиться к значению полей грида
Код: plaintext
1.
2.
yourTable.Columns.Add("Cost",GetType(Decimal),
"Amount*Price")

Я изменила на свои наименования, но строка подчеркивается
...
Рейтинг: 0 / 0
22.07.2004, 15:22
    #32617150
vooo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как обратиться к значению полей грида

MSDN - DataColumnCollection.Add Method пример
Private Sub AddColumn()
Dim cols As DataColumnCollection
Dim myCol As DataColumn
' Get the DataColumnCollection of a table in a DataSet.
cols = DataSet1.Tables("Orders").Columns
' КАК РАЗ СЛУЧАЙ С EXPRSSION
myCol = cols.Add("Total", System.Type.GetType("System.Decimal"), _
"Price + Tax")
myCol.ReadOnly = True
myCol.Unique = False
End Sub



[\B]
...
Рейтинг: 0 / 0
22.07.2004, 15:46
    #32617228
irinka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как обратиться к значению полей грида
что-то мне не понятен этот вариант...
а что без доп поля нельзя обойтись, а с имеющимся проделать обновление?
...
Рейтинг: 0 / 0
22.07.2004, 16:18
    #32617319
vooo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как обратиться к значению полей грида
у вас ,очевидно, существует какое то поле для отображения итогового поля сумма (допустим Cost).
можно его и задействовать. Просто у данного поля соотв. образом заполнить св-во
Expression.
yourTable.Columns.("Cost").Expression="Amount*Price"


другой вариант - более долгий и не совсем правильный, с помощью CurrencyManager узнать кол-во записей в гриде, бежать по записе в цикле и пересчитывать значение .....
...
Рейтинг: 0 / 0
22.07.2004, 16:28
    #32617354
vooo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как обратиться к значению полей грида
Ну а как обратиться : см DataGrid.Item Property
например так gr(iRow, iCol)
...
Рейтинг: 0 / 0
22.07.2004, 16:52
    #32617444
irinka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как обратиться к значению полей грида
спасибо за помощь...
я написала так:
Код: plaintext
1.
2.
        mydataset.Tables("mytable").Columns("pole3").Expression = "pole1*pole2"

и теперь при переходе на др строку в поле3 грида отображается подсчитанное значение
...
Рейтинг: 0 / 0
22.07.2004, 16:59
    #32617466
irinka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как обратиться к значению полей грида
в совокупности все выглядит так:

Код: plaintext
1.
2.
3.
4.
      AddHandler objDS_Documents.Tables("TPositions").ColumnChanged, AddressOf MyColumnChanged  ' подпишимся на ColumnChanged

Public Sub MyColumnChanged(ByVal sender As Object, ByVal e As System.Data.DataColumnChangeEventArgs)
        objDS_Documents.Tables("tpositions").Columns("position_stoim").Expression = "position_kolichestvo*position_price"
End Sub
...
Рейтинг: 0 / 0
23.07.2004, 12:47
    #32618572
irinka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как обратиться к значению полей грида
В продолжение у меня возник следующий вопрос:
В гриде как уже говорилось есть поле Сумма, равное кол-во*цена.
На форме же еще есть текстбокс, который отражает Sum(поле Сумма).

Вопрос такой... После изменения кол-ва или цены мне нужно, чтоб пересчитывалось не только поле Сумма в гриде, но и тестбокс на форме.

Как это лучше реализовать???
На VB6 я создала рекордсет, куда заносился рез-т sql запроса
(select sum(position_stoim))
Потом значению поля из рекордсета основго присваивала полученное значению из только что созданного рекордсета.
...
Рейтинг: 0 / 0
23.07.2004, 13:19
    #32618656
irinka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как обратиться к значению полей грида
Написала так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
Dim mysqlcmd As New System.Data.SqlClient.SqlCommand()
        mysqlcmd.Connection = SqlConnection1
        mysqlcmd.CommandType = CommandType.Text

        mysqlcmd.CommandText = "sum(position_stoim*position_kurs_currency) from tpositions"
        Dim vtotalsum As VariantType

        TextBox1.Text = mysqlcmd.ExecuteScalar
Однако подчеркивается последняя строка
(TextBox1.Text = mysqlcmd.ExecuteScalar).

Что неправильно?
PS. Connection уже открыт на момент выполнения этого обработчика
...
Рейтинг: 0 / 0
23.07.2004, 13:58
    #32618779
vooo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как обратиться к значению полей грида
TextBox1.Text = mysqlcmd.ExecuteScalar

ExecuteScalar возвращает тип object. Вам надо воспользоваться CType для преобразования возвращаемого значения в строку, которая впоследствии может быть присвоена св-ву Text.
...
Рейтинг: 0 / 0
23.07.2004, 14:50
    #32618950
irinka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как обратиться к значению полей грида
Спасибо, исправила, но пока сам обработчик не работает должным образом.
Во-первых я подумала, что в запросе у меня не стоит условие, что подсчитывать по столбцу в гриде только для текущей записи из главной таблицы. Пэтому я изменила чуть запрос, но не уверена, что он правильный.
Это было раз.
Во-вторых как выглядит весть обработчик для полноты картины:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Public Sub MyColumnChanged(ByVal sender As Object, ByVal e As System.Data.DataColumnChangeEventArgs)

        objDS_Documents.Tables("tpositions").Columns("position_stoim").Expression = "position_kolichestvo*position_price"

        Dim mysqlcmd As New System.Data.SqlClient.SqlCommand()
        mysqlcmd.Connection = SqlConnection1
        mysqlcmd.CommandType = CommandType.Text
        mysqlcmd.CommandText = "sum(position_stoim*position_kurs_currency) from tpositions where document_id=?"
        TextBox1.Text = CType(mysqlcmd.ExecuteScalar, String)

End Sub 
...
Рейтинг: 0 / 0
23.07.2004, 14:59
    #32618975
irinka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как обратиться к значению полей грида
малеенькая поправочка:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Public Sub MyColumnChanged(ByVal sender As Object, ByVal e As System.Data.DataColumnChangeEventArgs)

        objDS_Documents.Tables("tpositions").Columns("position_stoim").Expression = "position_kolichestvo*position_price"

        Dim mysqlcmd As New System.Data.SqlClient.SqlCommand()
        mysqlcmd.Connection = SqlConnection1
        mysqlcmd.CommandType = CommandType.Text
        mysqlcmd.CommandText = "select sum(position_stoim*position_kurs_currency) from tpositions where document_id=?"
        TextBox1.Text = CType(mysqlcmd.ExecuteScalar, String)

End Sub
...
Рейтинг: 0 / 0
23.07.2004, 15:00
    #32618980
vooo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как обратиться к значению полей грида
mysqlcmd.Connection = SqlConnection1
mysqlcmd.CommandType = CommandType.Text
mysqlcmd.CommandText = "sum(position_stoim*position_kurs_currency) from tpositions where document_id=?"
TextBox1.Text = CType(mysqlcmd.ExecuteScalar, String)

End Sub

У вас используется запрос с параметром
Очевидно конструкция все таки должна определять параметр:

mysqlcmd.CommandText = "sum(position_stoim*position_kurs_currency) from tpositions where document_id=@id"
mysqlcmd..Parameters.Add("@id", SqlDbType.Int, 5)
mysqlcmd.Parameters(0).Value = !!!!!!!!!!некторое значение
TextBox1.Text = CType(mysqlcmd.ExecuteScalar, String)
[\B]
...
Рейтинг: 0 / 0
23.07.2004, 15:03
    #32618990
vooo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как обратиться к значению полей грида
mysqlcmd.Parameters.Add("@id", SqlDbType.Int, 5)

Извиняюсь - промахнулся, Integer не имеет размерности
правильнее так
mysqlcmd.Parameters.Add("@id", SqlDbType.Int,0)
...
Рейтинг: 0 / 0
23.07.2004, 15:13
    #32619028
irinka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как обратиться к значению полей грида
Я написала так:

Код: plaintext
1.
2.
3.
4.
5.
6.
Dim mysqlcmd As New System.Data.SqlClient.SqlCommand()
        mysqlcmd.Connection = SqlConnection1
        mysqlcmd.CommandType = CommandType.Text
        mysqlcmd.CommandText = "select sum(position_stoim*position_kurs_currency) from tpositions where document_id=@document_id"
        mysqlcmd.Parameters.Add("@document_id", SqlDbType.Int,  5 )
        mysqlcmd.Parameters( 0 ).Value = objDS_Documents.Tables("tpositions").Columns("document_id")
        TextBox1.Text = CType(mysqlcmd.ExecuteScalar, String)

Но пока, при выполнени этого обработчика ничего не происходит и значение в тексбоксе остается прежним.
...
Рейтинг: 0 / 0
23.07.2004, 15:25
    #32619062
vooo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как обратиться к значению полей грида
Все таки правильнее написать так:
mysqlcmd.Parameters.Add("@document_id", SqlDbType.Int, 0)[\B]
Далее я бы проверил чему равняется Value или objDS_Documents.Tables("tpositions").Columns("document_id")
Как я понимаю - у вас MS SQL - далее я бы выполнил запрос НА СЕРВЕРЕ с данным параметром . Если он выполнился корректно, то тогда надо искать проблему дальше
И еще - document_id действительно интеджеровское поле?
...
Рейтинг: 0 / 0
23.07.2004, 15:32
    #32619085
irinka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как обратиться к значению полей грида
1.
mysqlcmd.Parameters.Add("@document_id", SqlDbType.Int, 0)
Спасибо, исправила.
2.

Я не совсем уверена, что она правильная. Пыталась посмотреть в вотче после присвоения и нигде не увидела чтоб значение стало равняться текущему значение document_id
...
Рейтинг: 0 / 0
23.07.2004, 15:48
    #32619135
vooo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как обратиться к значению полей грида
Правильно ли я понимаю что вы хотите работать с помеченной строкой датагрида и оттуда брать значение document_id. Если так - то нужно работать с CurrencyManager - примерно так
Dim cm As CurrencyManager = indingContext(dataGrid1.DataSource, dataGrid1.DataMember)
Dim rv As DataRowView = CType(cm.Current, DataRowView) 'вот это текущая строка грида
rv("documnet_id") - это и есть значение поля
...
Рейтинг: 0 / 0
23.07.2004, 15:50
    #32619155
vooo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как обратиться к значению полей грида
Вместо
Dim cm As CurrencyManager = indingContext(dataGrid1.DataSource, dataGrid1.DataMember)
Нужно
Dim cm As CurrencyManager = BindingContext(dataGrid1.DataSource,
...
Рейтинг: 0 / 0
23.07.2004, 15:51
    #32619160
vooo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как обратиться к значению полей грида
ЧТО ТАКОЕ - ОПЯТЬ ОШИБСЯ!!!
Вместо
Dim cm As CurrencyManager = indingContext(dataGrid1.DataSource, dataGrid1.DataMember)
Нужно
Dim cm As CurrencyManager = BindingContext(dataGrid1.DataSource,dataGrid1.DataMember)
...
Рейтинг: 0 / 0
23.07.2004, 16:30
    #32619284
irinka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как обратиться к значению полей грида
в строке:
Код: plaintext
Dim cm As CurrencyManager = BindingContext(grdTPositions.DataSource, grdTPositions.DataMember)
у меня подчеркивается:
BindingContext(grdTPositions.DataSource, grdTPositions.DataMember)
...
Рейтинг: 0 / 0
23.07.2004, 16:39
    #32619313
vooo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как обратиться к значению полей грида

я просто использовал синатксис C# на котором работаю...
надо приветсти к типу CurrencyManager
Dim cm As CurrencyManager = CType(BindingContext(grdTPositions.DataSource, grdTPositions.DataMember),CurrencyManager)
...
Рейтинг: 0 / 0
26.07.2004, 13:58
    #32621195
irinka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как обратиться к значению полей грида
Вот текст на данный момент:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
Public Sub MyColumnChanged(ByVal sender As Object, ByVal e As System.Data.DataColumnChangeEventArgs)

        objDS_Documents.Tables("tpositions").Columns("position_stoim").Expression = "position_kolichestvo*position_price"

        Dim mysqlcmd As New System.Data.SqlClient.SqlCommand()
        mysqlcmd.Connection = SqlConnection1
        mysqlcmd.CommandType = CommandType.Text
        mysqlcmd.CommandText = "select sum(position_stoim*position_kurs_currency) from tpositions where document_id=@document_id"
        mysqlcmd.Parameters.Add("@document_id", SqlDbType.Int,  0 )
        Dim cm As CurrencyManager = CType(BindingContext(grdTPositions.DataSource, grdTPositions.DataMember), CurrencyManager)
        Dim rv As DataRowView = CType(cm.Current, DataRowView) 
        mysqlcmd.Parameters( 0 ).Value = rv("documnet_id")
        TextBox1.Text = CType(mysqlcmd.ExecuteScalar, String)

End Sub

Проблема того, что не происходит пересчет в текстбоксе до сих пор осталась.
Посмотрела по вотчу и вот что увидела после строки
mysqlcmd.Parameters(0).Value = rv("documnet_id")
mysqlcmd.Parameters(0).Value имеет Nothing
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / как обратиться к значению полей грида / 25 сообщений из 61, страница 1 из 3
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]