Sunil Bansode Ответов: 3

Как заполнить DataGridviewComboboxColumn, в зависимости от выбора другого DataGridviewComboboxColumn


Уважаемый Сэр,

В моем приложении Windows с помощью Vb.net, в datagridview у меня есть два разных столбца DataGridViewComboBoxColumn

Я прикрепил набор данных к 1-му столбцу DataGridViewComboBoxColumn..
теперь в соответствии с пунктом выбора из этого комбо я хочу прикрепить базу данных ко 2-му DataGridViewComboBoxColumn


пример:
Ниже приведены 2 столбца DatagridviewCombobox в DataGridView
CountryCombobox         CityCombobox (Selected Item Is 'India' From                                        
                                                       1st combo that is
                                                       'CountryCombobox')
---------------        ------------------  
US                     Delhi
UK                     Mumbai  
India                  Kolkota
                       Banglore


Пожалуйста, помогите мне...

Спасибо...

3 Ответов

Рейтинг:
22

Aarti Meswania

использовать dataGridView_CurrentCellDirtyStatechanged событие для достижения этой цели
колонки проверить currentcell является колонна ваше первое комбо
затем в соответствии с изменением значения источника данных второй ячейки combobox этой текущей строки,

напр.

Private Sub dgv1_CurrentCellDirtyStateChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles dgv1.CurrentCellDirtyStateChanged
        Try
            If (dgv1.IsCurrentCellDirty) Then
                dgv1.CommitEdit(DataGridViewDataErrorContexts.Commit)
                If dgv1.CurrentCell.ColumnIndex = 1 Then
                    If dgv1.CurrentCell.Value <> 0 Then
                        Dim t = DirectCast(dgv1.Rows(dgv1.CurrentCell.RowIndex).Cells(3), DataGridViewComboBoxCell)
                        t.DataSource = DBGetData("select col1,col2 from tbl1 where col3=" & dgv1.CurrentCell.Value)
                        t.DisplayMember = "col1"
                        t.ValueMember = "col2"
                        t.Value = 0
                    End If
                End If
            End If
        Catch
        End Try
    End Sub


Счастливого Кодирования!
:)


Sunil Bansode

Большое спасибо...
Это работает...

Aarti Meswania

добро пожаловать :)

Рейтинг:
2

Christian Graus

Вам нужно повторно выбрать данные, иначе два элемента управления будут синхронизированы. Вы можете сделать копию источника данных, а не запрашивать базу данных дважды.


Sunil Bansode

Спасибо за совет

Рейтинг:
1

LuckyNB

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

Private Sub dgTrans_CurrentCellDirtyStateChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles dgTrans.CurrentCellDirtyStateChanged
       Try
           If (dgTrans.IsCurrentCellDirty) Then
               dgTrans.CommitEdit(DataGridViewDataErrorContexts.Commit)
               If dgTrans.CurrentCell.ColumnIndex = 1 Then
                   If dgTrans.CurrentCell.Value <> 0 Then
                       Dim t As DataGridViewComboBoxColumn = dgTrans.Columns(3)
                       t.DataSource = DBGetData("select col1,col2 from tbl1 where col3=" & dgTrans.CurrentCell.Value)
                       t.DisplayMember = "col1"
                       t.ValueMember = "col2"
                       t.Value = 0
                   End If
               End If
           End If
       Catch
       End Try
   End Sub