1

Я работал в проекте с VS2005 и VB.NET, в этом проекте у меня есть DataGridView с 3 DataGridViewComboboxCell внутри него. То, что я пытался сделать, это сделать так, чтобы, когда пользователь выбирает значение из первого DataGridViewComboboxCell, изменяется значение 2 других ячеек. Это код для этой части:DatagridViewComboboxCell selectedindexchanged не работает

Private Sub DataGridView1_EditingControlShowing(ByVal sender As System.Object, ByVal e   As System.Windows.Forms.DataGridViewEditingControlShowingEventArgs) Handles DataGridView1.EditingControlShowing 

    If (TypeOf e.Control Is DataGridViewComboBoxEditingControl) AndAlso _ 
     DataGridView1.CurrentCell.ColumnIndex = 1 Then 

     Dim cbo As ComboBox = TryCast(e.Control, ComboBox) 
     If (cbo IsNot Nothing) Then 
      RemoveHandler cbo.SelectedIndexChanged, AddressOf comboBox_SelectedIndexChanged 

      AddHandler cbo.SelectedIndexChanged, AddressOf comboBox_SelectedIndexChanged 
     End If 
    End If 

End Sub 

Private Sub comboBox_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs) 

    Dim combo As ComboBox = TryCast(sender, ComboBox) 
    Dim rowIndex As Long = DataGridView1.CurrentRow.Index 
    Dim valueType As Type = GetType(Long) 

    If (combo.SelectedValue IsNot Nothing) Then 
     Dim comboValueType As Type = combo.SelectedValue.GetType() 
     Dim p As Boolean = valueType.Equals(comboValueType) 

     If Not valueType.Equals(comboValueType) Then 
      Exit Sub 
     End If 
    End If 

    DataGridView1.Rows(rowIndex).Cells(2).Value = 'Some DB query to retrieve the value 

End Sub 

Первая проблема, которая у меня есть, что, когда я открываю список из выпадающего списка и введите I, чтобы выбрать один элемент из выпадающего списка, которые начинаются с I. Выпадающий не обновляется, чтобы выбрать этот пункт и всегда возвращается к первому элементу в выпадающем списке, так что я делаю, чтобы сделать эту работу было изменить значение выпадающего списка на его собственном SelectedIndexChange, как это:

Private Sub comboBox_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs) 

    Dim combo As ComboBox = TryCast(sender, ComboBox) 
    Dim rowIndex As Long = DataGridView1.CurrentRow.Index 
    Dim valueType As Type = GetType(Long) 

    If (combo.SelectedValue IsNot Nothing) Then 
     Dim comboValueType As Type = combo.SelectedValue.GetType() 
     Dim p As Boolean = valueType.Equals(comboValueType) 

     If Not valueType.Equals(comboValueType) Then 
      Exit Sub 
     End If 
    End If 

    DataGridView1.Rows(rowIndex).Cells(1).Value = combo.SelectedValue 
    DataGridView1.Rows(rowIndex).Cells(2).Value = 'Some DB query to retrieve the value 
End Sub 

Вторая проблема заключается в том, когда я набираю другую букву для выбора элемента, начинающегося с этой буквы, и без нажатия клавиши ввода или щелчка элемента, который я изменил на другой DatagridViewComboboxCell, со списком, который снова вызывает событие SelectedIndexChanged, которое меняет его значение на первый элемент в выпадающем списке.

Любая идея, почему это происходит?

ответ

1

Вы совсем близко. Это то, что я сделал с выбраннымIndexChanged, чтобы обновить его.

Я заметил, что проблема, похоже, лежит в строке combo.SelectedValue. Это значение никогда не изменяется, если вы не покинете ячейку. Вам нужно использовать combo.SelectedItem, который изменяется каждый раз, когда вы меняете combobox.

Попробуйте вместо этого:

Private Sub comboBox_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs) 
Dim combo As ComboBox = TryCast(sender, ComboBox) 
Dim test As Long 
If (combo.SelectedItem IsNot Nothing) Then 
    If Not Long.TryParse(combo.SelectedItem, test) Then 
      Exit Sub 
    End If 
End If 
DataGridView2.CurrentCell.Value = combo.SelectedItem 
DataGridView1.Rows(rowIndex).Cells(1).Value = combo.SelectedItem 
DataGridView1.Rows(rowIndex).Cells(2).Value = 'Some DB query to retrieve the value 

Я изменил то, как вы проверяете, если это Long. Если он проходит Long.TryParse, то он длинный. Этот код работает для меня, чтобы изменить значение других ячеек, если это не исправить, тогда я не уверен, что будет. Я также изменил все SelectedValue на SelectedItem, так как SelectedValue всегда содержит последнее выбранное значение, а не текущее.

+0

Hi WozzeC, я использую 'dgvOperaciones.Rows (idx) .Cells (2) .Value = combo.SelectedValue' и combo.SelectedValue отлично работает, но проблема сохраняется. Я изменил свой код и использовал ваш код и не работал. – fcartu

Смежные вопросы