Vb.net / DataGridView - / ComboBox-Spalte
Ich bin mit vb.net und winforms.
Ich habe ein Formular mit einem DataGridView Gebunden. Auf der DGV ich habe 5 Spalten mit einer ComboBox. Ich bin mit dem EditingControlShowing Auch zu fangen der ComboBox Auswahl. (siehe code unten).
Hier ist das problem:
Nachdem ich Sie auf eine Zelle mit einer ComboBox eine Auswahl treffen und dann aktualisieren der zugrunde liegenden Zelle (Zelle = ausgewählt, Wert) und klicken Sie dann auf eine andere Zeile in der DGV geht es drunter und drüber. Wenn nach dem update ich die Zelle, die ich tun, und EndEdit auf die entsprechende Zeile der Datenquelle ein, es scheint zu funktionieren zu finden.
Wie kann ich feststellen, ob entsprechende Daten-Source-Zeile, so dass ich den Vorgang automatisieren?
Private Sub dataGridView1_EditingControlShowing(ByVal sender As Object, ByVal e As DataGridViewEditingControlShowingEventArgs) _
Handles DataGridView1.EditingControlShowing
Try
Debug.Print("entered the EditingControlShowing")
Dim ColName As String = Me.DataGridView1.Columns(Me.DataGridView1.CurrentCell.ColumnIndex).Name
If ColName = "Col1" Then 'Or ColName = "Col2" Or ColName = "Col3" Or ColName = "Col4" Or ColName = "Col5" Then
'the column you want to cast
Dim cmb As ComboBox = TryCast(e.Control, ComboBox)
RemoveHandler cmb.SelectedIndexChanged, AddressOf cmb_SelectedIndexChanged
AddHandler cmb.SelectedIndexChanged, AddressOf cmb_SelectedIndexChanged
End If
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub
Sub cmb_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs)
Try
Me.DataGridView1.Rows(Me.DataGridView1.CurrentRow.Index).Cells(Me.DataGridView1.CurrentCell.ColumnIndex).Value = CType(sender, ComboBox).SelectedItem
'
' HERE IF I PUT MyDataSet.Tables(0).Rows(?).EndEding it works - but how to konw what row?
'
UpdateAvgColumn(Me.DataGridView1.CurrentRow.Index)
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub
- Sie haben eine eindeutige Kennung, die in das DataGridView? Wenn ja, können Sie diesen Wert verwenden, finden Sie die entsprechende Zeile im Dataset.
- Versuchen
MyDataSet.Tables(0).Rows(Me.DataGridView1.CurrentRow.Index).EndEding
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die Ereignisse gefeuert werden wieder Einzug. Wenn Sie aktuell Bearbeiten, ein Ereignis, man muss vorsichtig sein, nicht um andere Ereignisse. Sie haben, um IF-Anweisungen, um die Verarbeitung der Ereignisse zu überspringen ausführen von code, wenn ein anderes Ereignis verarbeitet wird.