Hallo!
Falls Du unbedingt neu laden mußt,
hier ein Beispiel zum Speichern der Schlüsselwerte des
aktuellen Satzes und zum Finden des entsprechenden Satzes
in der Datenquelle (Datatable), z.B. nach dem Neuladen.
Public Class frmFindRow
Dim dt As New DataTable
Dim bs As New BindingSource
Dim dgv As New DataGridView With
{.Parent = Me, .DataSource = bs,
.Size = New Drawing.Size(500, 400),
.AllowUserToAddRows = False}
Dim WithEvents btnSetRow As New Button With
{.Parent = Me, .Text = "Notiere Satz",
.Top = 410, .Width = 150}
Dim WithEvents btnFindRow As New Button With
{.Parent = Me, .Text = "Markiere Satz",
.Top = 410, .Width = 150, .Left = 160}
'Klasse, um Schlüsselwerte zu speichern
Private Class RowKey
Public Name As String = ""
Public Vorname As String = ""
Public Ort As String = ""
Public Strasse As String = ""
Public Nummer As Integer
End Class
'Für die Schlüsselwerte des zuletzt notierten Satzes
Dim CurrentRowkey As RowKey = New RowKey
Private Sub frmFindRow_Load(sender As Object,
e As EventArgs) Handles MyBase.Load
Me.Size = New Size(520, 480)
'Testdaten erstellen
With dt
With .Columns
.Add("Name", GetType(String))
.Add("Vorname", GetType(String))
.Add("Ort", GetType(String))
.Add("Strasse", GetType(String))
.Add("Nummer", GetType(String))
End With
.PrimaryKey =
{.Columns(0), .Columns(1), .Columns(2), .Columns(3), .Columns(4)}
With .Rows
.Add("Albert", "Wolfgang", "Brüssel", "xyz", 12)
.Add("Alberti", "Dieter", "München", "xyz", 22)
.Add("Meyer", "Dieter", "München", "xyz", 22)
.Add("Albert", "Magnus", "München", "abc", 44)
.Add("Albert", "Wolfgang", "Brüssel", "xyz", 32)
.Add("Alberti", "Dieter", "München", "xyz", 52)
.Add("Meyer", "Dieter", "München", "xyz", 21)
.Add("Albert", "Magnus", "München", "abc", 45)
End With
End With
'Datenbindung
bs.DataSource = dt
End Sub
Private Sub btnSetRow_Click(sender As Object,
e As EventArgs) Handles btnSetRow.Click
'Aktuelle Zeile: Schlüsselwerte notieren
Dim cr As DataGridViewRow = dgv.CurrentRow
With CurrentRowkey
.Name = cr.Cells("Name").Value.ToString
.Vorname = cr.Cells("Vorname").Value.ToString
.Ort = cr.Cells("Ort").Value.ToString
.Strasse = cr.Cells("Strasse").Value.ToString
.Nummer = CInt(cr.Cells("Nummer").Value)
End With
End Sub
Private Sub btnFindRow_Click(sender As Object,
e As EventArgs) Handles btnFindRow.Click
'Zeile in der Datenquelle suchen
Dim dr As DataRow
With CurrentRowkey
dr = dt.Rows.Find
({ .Name, .Vorname, .Ort, .Strasse, .Nummer})
End With
If dr Is Nothing Then
MsgBox("Schlüssel nicht gefunden")
Exit Sub
End If
'Zeilenposition im der Bindingsource ermitteln
Dim index As Integer = -1
Dim found As Boolean
Do
index += 1
found = DirectCast(bs(index), DataRowView).Row.Equals(dr)
Loop While Not found And index < bs.Count - 1
If found Then bs.Position =index
End Sub
End Class |