Hallo,
Ich habe folgendes Problem:
Ich habe ein Datagridview, welches nicht direkt bearbeitet werden kann.
Nur per Doppelklick öffnet sich ein eigenes fenster, in dem die jeweilige Zeile bearbeitet werden kann.
Nach dem Bearbeiten schreibe ich diese infos direkt in die Datenbank. Anschließend muss daher die DataSource aktualisiert werden.
Damit dann immer noch die selbe Zeile(n) ausgewählt sind habe ich das Datagridview folgendermaßen überschrieben:
Es werden auch nach dem Update die entsprechenden Zeilen richtig markiert.
Mein Problem: Wenn ich die Pfeiltasten betätige beginnen diese immer bei der 1. Zeile. Also egal welche Zeile markiert ist, wenn man die Pfeiltaste nach unten drückt wird immer die Zweite Zeile ausgewählt.
Ich habe bereits herausgefunden, dass auch CurrentCellAddress.Y auf 0 steht.
Meine Frage: Wie setze ich richtig die Ausgewählten und Aktiven Zellen? Derzeit setue ich nur die Auswahl mit Me.Rows(i).Selected = True. Ich vermute es gibt aber noch eine art Aktive Zelle, die für die Pfeiltasten verwendet wird.
Danke im Voraus!
Ich habe folgendes Problem:
Ich habe ein Datagridview, welches nicht direkt bearbeitet werden kann.
Nur per Doppelklick öffnet sich ein eigenes fenster, in dem die jeweilige Zeile bearbeitet werden kann.
Nach dem Bearbeiten schreibe ich diese infos direkt in die Datenbank. Anschließend muss daher die DataSource aktualisiert werden.
Damit dann immer noch die selbe Zeile(n) ausgewählt sind habe ich das Datagridview folgendermaßen überschrieben:
VB.NET-Quellcode
- Overloads Property DataSource As Object
- Get
- Return MyBase.DataSource
- End Get
- Set(value As Object)
- SelectedIDs = getSelectedRowsID()
- 'Dim a As String = ""
- 'For i As Integer = 0 To SelectedIDs.Count - 1
- ' a &= "; " & SelectedIDs(i)
- 'Next
- 'MsgBox(a)
- MyBase.DataSource = value
- End Set
- End Property
- Protected Overrides Sub OnDataSourceChanged(e As EventArgs)
- MyBase.OnDataSourceChanged(e)
- If Not IsNothing(_IDColumnName) Then
- If Not IsNothing(Me.Columns(_IDColumnName)) Then
- Me.Columns(_IDColumnName).Visible = False
- End If
- End If
- 'Content Menue Strip
- For i As Integer = 0 To Me.Rows.Count - 1 Step 1
- 'Context Menü Strip Zuweisen
- Me.Rows(i).ContextMenuStrip = _RowContextMenuStrip
- Next
- setSelectedRowsID(SelectedIDs)
- End Sub
- Public Property IDColumnName As String
- Get
- Return _IDColumnName
- End Get
- Set(value As String)
- _IDColumnName = value
- End Set
- End Property
- Public Function getCurrentRowID() As Object
- If (Not IsNothing(Me.CurrentRow)) And (Not IsNothing(Me.IDColumnName)) Then
- If Not IsNothing(Me.CurrentRow.Cells(_IDColumnName)) Then
- Return Me.CurrentRow.Cells(_IDColumnName).Value
- End If
- End If
- Return Nothing
- End Function
- Public Function getSelectedRowsID() As Object()
- Try
- If (Not IsNothing(Me.IDColumnName)) Then
- Dim returnarray(Me.SelectedRows.Count - 1) As Object
- For i As Integer = 0 To Me.SelectedRows.Count - 1 Step 1
- returnarray(i) = Me.SelectedRows(i).Cells(_IDColumnName).Value
- Next
- Return returnarray
- End If
- Return Nothing
- Catch ex As Exception
- Return Nothing
- End Try
- End Function
- Public Sub setSelectedRowsID(ByRef liste() As Object)
- If IsNothing(IDColumnName) Then
- Return
- End If
- If IsNothing(liste) Then
- Return
- End If
- For i As Integer = 0 To Me.Rows.Count - 1
- Me.Rows(i).Selected = False
- Next
- For i As Integer = 0 To Me.Rows.Count - 1
- For j As Integer = 0 To liste.Length - 1
- If Me.Rows(i).Cells(IDColumnName).Value = liste(j) And Not IsNothing(liste(j)) Then
- Me.Rows(i).Selected = True
- Array.Clear(liste, j, 1)
- End If
- Next
- Next
- End Sub
- Public Sub printarray(ByVal l As Object())
- Dim ausgabe As String = "-"
- For i As Integer = 0 To l.Length - 1 Step 1
- ausgabe &= l(i) & "-"
- Next
- MsgBox(ausgabe & vbCrLf & "Länge: " & l.Length)
- End Sub
Es werden auch nach dem Update die entsprechenden Zeilen richtig markiert.
Mein Problem: Wenn ich die Pfeiltasten betätige beginnen diese immer bei der 1. Zeile. Also egal welche Zeile markiert ist, wenn man die Pfeiltaste nach unten drückt wird immer die Zweite Zeile ausgewählt.
Ich habe bereits herausgefunden, dass auch CurrentCellAddress.Y auf 0 steht.
Meine Frage: Wie setze ich richtig die Ausgewählten und Aktiven Zellen? Derzeit setue ich nur die Auswahl mit Me.Rows(i).Selected = True. Ich vermute es gibt aber noch eine art Aktive Zelle, die für die Pfeiltasten verwendet wird.
Danke im Voraus!