Benutzer mit den meisten Antworten
Wie kann ich eine Zeile in einem DataGridView selektieren ohne MouseClick

Frage
-
Hallo Leute,
wie kann ich eine Zeile in einem DataGridView markieren, so das ich Sie gleich auslesen kann!? Momentan muss ich den Mouse Cursor auf die gewünschte Zeile setzen und dann Linke Maustaste klicken damit das aufgerufen wird:
Private Sub DataGridView1_RowHeaderMouseClick(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellMouseEventArgs) Handles DataGridView1.RowHeaderMouseClick
Also um es kurz zu sagen möchte ich per Code eine Zeile im DGV markieren(Dreieickspfeil) und auslesen.
Antworten
-
Hallo,
wie kann ich eine Zeile in einem DataGridView markieren, so das
ich Sie gleich auslesen kann!? Momentan muss ich den Mouse
Cursor auf die gewünschte Zeile setzen und dann Linke Maustaste
klicken damit das aufgerufen wird:
Private Sub DataGridView1_RowHeaderMouseClick _
(ByVal sender As Object, _
ByVal e As System.Windows.Forms.DataGridViewCellMouseEventArgs _
) Handles DataGridView1.RowHeaderMouseClick
Also um es kurz zu sagen möchte ich per Code eine Zeile im DGV
markieren(Dreieickspfeil) und auslesen.Im nachfolgenden Beispiel siehst Du wie Du einen beliebigen
Datensatz im DGV resp. in der dem DGV zugeordneten DataSource
auswählen kannst und auch, wie Du an die Feldwerte des
ausgewählten Datensatzes herankommst.Kopiere nachfolgenden Code einfach in ein leeres Formmodul (Form1.vb)
' / / / Beginn Code
Public Class Form1
Private mDT As DataTable
Private WithEvents mBS As BindingSourcePrivate WithEvents DGV As DataGridView
Private WithEvents btnFirst As Button
Private WithEvents btnPrevious As Button
Private WithEvents btnNext As Button
Private WithEvents btnLast As ButtonPrivate Sub Form1_Load _
(ByVal sender As System.Object, _
ByVal e As System.EventArgs _
) Handles MyBase.LoadCreateControls()
CreateData()
DGV.DataSource = mBSEnd Sub
Private Sub Form1_Shown _
(ByVal sender As Object, _
ByVal e As System.EventArgs _
) Handles Me.ShownDGV.Columns(0).DefaultCellStyle.Alignment = _
DataGridViewContentAlignment.MiddleRightDGV.AutoResizeColumns()
End SubPrivate Sub CreateData()
Dim i As Integer
Dim DR As DataRowmDT = New DataTable
With mDT
.Columns.Add("ID", GetType(Integer))
.Columns.Add("LText", GetType(String))
.Columns.Add("SText", GetType(String))For i = 1 To 12
DR = .NewRow
DR.Item(0) = i
DR.Item(1) = MonthName(i, False)
DR.Item(2) = MonthName(i, True)
.Rows.Add(DR)
Next
.AcceptChanges()
End WithmBS = New BindingSource
mBS.DataSource = mDT
End SubPrivate Sub CreateControls()
DGV = New DataGridView
With DGV
.Name = "DGV"
.SetBounds _
(10, 10, _
Me.ClientSize.Width - 20, _
Me.ClientSize.Height - 70).Anchor = _
AnchorStyles.Left Or _
AnchorStyles.Top Or _
AnchorStyles.Right Or _
AnchorStyles.Bottom.DefaultCellStyle.Font = _
New Font("Arial", 12).ColumnHeadersDefaultCellStyle.Font = _
New Font("Arial", 8, FontStyle.Bold)End With
Me.Controls.Add(DGV)btnFirst = New Button
With btnFirst
.Name = "btnFirst"
.SetBounds(10, DGV.Bottom + 10, 40, 40)
.Text = "|<"
.Anchor = AnchorStyles.Left Or AnchorStyles.Bottom
End With
Me.Controls.Add(btnFirst)btnPrevious = New Button
With btnPrevious
.Name = "btnPrevious"
.SetBounds(btnFirst.Right + 2, btnFirst.Top, 40, 40)
.Text = "<"
.Anchor = AnchorStyles.Left Or AnchorStyles.Bottom
End With
Me.Controls.Add(btnPrevious)btnNext = New Button
With btnNext
.Name = "btnNext"
.SetBounds(btnPrevious.Right + 2, btnFirst.Top, 40, 40)
.Text = ">"
.Anchor = AnchorStyles.Left Or AnchorStyles.Bottom
End With
Me.Controls.Add(btnNext)btnLast = New Button
With btnLast
.Name = "btnLast"
.SetBounds(btnNext.Right + 2, btnFirst.Top, 40, 40)
.Text = ">|"
.Anchor = AnchorStyles.Left Or AnchorStyles.Bottom
End With
Me.Controls.Add(btnLast)
End SubPrivate Sub NavButton_Click _
(ByVal sender As Object, _
ByVal e As System.EventArgs _
) Handles _
btnFirst.Click, _
btnPrevious.Click, _
btnNext.Click, _
btnLast.ClickSelect Case True
Case sender Is btnFirst
mBS.Position = 0Case sender Is btnPrevious
mBS.Position -= 1Case sender Is btnNext
mBS.Position += 1Case sender Is btnLast
mBS.Position = mBS.Count - 1End Select
End Sub
Private Sub mBS_PositionChanged _
(ByVal sender As Object, _
ByVal e As System.EventArgs _
) Handles mBS.PositionChangedDim DRV As DataRowView = _
DirectCast(mBS.Current, DataRowView)' Werte aus der DataRowView des akt.
' ausgewählten Datensatzes lesen:
Me.Text = _
DRV.Item(0).ToString & " " & _
DRV.Item(1).ToString & " " & _
DRV.Item(2).ToStringEnd Sub
Private Sub DGV_CurrentCellChanged _
(ByVal sender As Object, _
ByVal e As System.EventArgs _
) Handles DGV.CurrentCellChanged' Werte aus DGV.CurrentRow.Cells(x) lesen:
If DGV.CurrentRow IsNot Nothing Then
Dim Buffer As String
With DGV.CurrentRow
Buffer = _
(DGV.CurrentRow.Cells(0).Value.ToString & " " & _
DGV.CurrentRow.Cells(1).Value.ToString & " " & _
DGV.CurrentRow.Cells(2).Value.ToString)
End With
Console.WriteLine(Buffer)
End If
End Sub
End Class
' \ \ \ E N T ENach dem Programmstart siehst Du die Form1 mit einem DataGridView
und vier Buttons, mit denen Du im Datenbestand navigieren kannst.
Ein Klick auf einen dieser Buttons führt Code aus, der den ersten,
vorhergehenden, nächsten oder letzten Datensatz markiert.In Sub mBS_PositionChanged() wird direkt auf die akt. DataRowView
der DGV.DataSource zugegriffen.In Sub DGVC_CurrentCellChanged wird auf DGV.CurrentRow.Cells(x)
zugegriffen.Die Nummer der akt. ausgewählten Zeile bekommst Du mit
Dim RowNumber as integer = mBS.Position
wobei die erste Zeile den Wert 0 und die letzte Zeile den
Wert mBS.Count-1 hat.
Ist keine Zeile ausgewählt, dann liefert mBS.Position den Wert -1.Mit
mBS.Position = Zeilennummer
kannst Du eine beliebige Zeilennummer innerhalb des
Datenbestandes auswählen.Mehr Beispiele mit dem DataGridView findest Du unter
www.gssg.de -> Visual Basic -> VB.net
-> DataGridViewGruß aus St.Georgen
Peter Götz
www.gssg.de (mit VB-Tipps u. Beispielprogrammen)- Als Antwort vorgeschlagen Okeanos85 Dienstag, 19. Oktober 2010 06:07
- Als Antwort markiert Thorsten DörflerModerator Donnerstag, 21. April 2011 07:01
-
Hallo nochmal,
ich weiss nicht, warum diese Forensoftware heute glaubt,
alles und jedes nach Gutdünken kaputtformatieren zu müssen,
deshalb ein erneuter Versuch, mein Posting lesbar auf den
Weg zu bringen.meine Listbox ist gefüllt mit Text nach dem Schema:
Nachname_Vorname_ID
dieser ensteht, da ich TXT Dateien nach bestimmten Suchbegriffen mittels
RegEx durchsuche. Sollte ein Treffer vorkommen bildet mein Programm
einen Listbox Eintag nach folgenden Code:
[code]
If TrefferJaNein = True Then _
' Wenn Schleife NICHT vorzeitig beendet wurde
'ListBox1.Items.Add(Datei)
Dim Teil1 As String
Teil1 = System.IO.Path.GetDirectoryName(Datei)
ListBox1.Items.Add(".." & Datei.Substring(Teil1.Length))
Label6.Text = ListBox1.Items.Count
Application.DoEvents()
Was soll dieses .DoEvents bewirken?
End If
Dies geschieht natürlich in einer Schleife für mehere tausend Textdateien.
Und wie lange dauert es bis Du mehrere tausend Textdateien nach
bestimmten Begriffen durchsucht hast?Wenn sämtliche Trefferdateien in der Listbox abgebildet sind kann ich per:
Private Sub ListBox1_SelectedValueChanged _
(ByVal sender As Object, _
ByVal e As System.EventArgs _
) Handles ListBox1.SelectedValueChanged
ListBox3.Visible = False
ListBox3.Items.Clear()
'dv = New DataView(dt)
'If dv.RowFilter = "" Then
DataGridView1.DataSource = dtWie und wo dt deklariert, erstellt und mit welchen Daten gefüllt wird
sehe ich bisher immer noch nicht.'End If
Auswahl()
End Sub
und
Sub Auswahl()
Dim Eintrag As String
Dim Von, Bis As Integer
Dim Zeilenwert As Integer
Eintrag = ListBox1.SelectedItem
Von = Eintrag.LastIndexOf("_") + 1
Bis = Eintrag.LastIndexOf(".") <br/>
ID = Eintrag.Substring(Von, Bis - Von)
For Each Zeile As DataGridViewRow In DataGridView1.Rows
If Zeile.Cells("ID").Value = ID Then
Zeilenwert = Zeile.Index
'DataGridView1.Rows(Zeilenwert).Selected = True
DataGridView1.Rows(Zeilenwert).Selected = _
DataGridViewSelectionMode.FullRowSelect
DataGridView1.FirstDisplayedScrollingRowIndex = Zeilenwert
Exit For
End If
Next
End Sub
direkt im DataGridView in den passenden Datensatz welcher aus
dem Listbox Eintrag extrahiert wird springen.Eine Zeile mit einer bestimmten ID im Datenbestand einer DataTable
kann man deutlich einfacher und schneller mit BindingSource.Find()
ermitteln.
Voraussetzung dafür ist, dass man vorher die Spalte ID als
Primärschlüssel definiert hat (s.Code im Beispiel unten).Also der Datensatz: ..\Nachname_Vorname_ID wird zerlegt und
die ID für die relvante Suche im DataGridView herangezogen.
Dann wird die dementsprechende Zeile im DataGridView markiert.
Jedoch ohne das dieser Zeile "der Pfeil" sprich der Datensatzmarker
voransteht.
Ich möchte also in der Listbox ein Eintrag auswählen, dieser soll dann
im DataGridview angezeigt werden und gleichzeitig auf diesen Datensatz
der Marker gesetzt werden.Welcher "Marker" soll auf den Datensatz gesetzt werden?
Im vorigen Satz hast Du gefordert, dass der "Pfeil" nicht auf
diesem Datensatz stehen soll.
Was denn nun?Sorry ist halt ein wenig schwierig zu beschreiben.
Das ist meist ein Zeichen dafür, dass das gewählte Programmkonzept
möglicherweise doch noch nicht so ganz gründlich durchdacht ist.Hier mal mein früheres Beispiel mit einer Erweiterung um eine ComboBox
in welcher nach Auswahl eines bestimmten Eintrages die hierzu passende
Zeile im DGV markiert wird, der Datensatzmarkierer (Pfeil) jedoch auf der
bisher gewählten Zeile verbleibt.' / / / Code in Formmodul (Form1.vb)
Public Class Form1
Private WithEvents CBox As ComboBox
Private mDT As DataTable
Private WithEvents mBS As BindingSourcePrivate mMonTable As DataTable
Private WithEvents DGV As DataGridView
Private WithEvents btnFirst As Button
Private WithEvents btnPrevious As Button
Private WithEvents btnNext As Button
Private WithEvents btnLast As ButtonPrivate Sub Form1_Load _
(ByVal sender As System.Object, _
ByVal e As System.EventArgs _
) Handles MyBase.LoadCreateControls()
CreateData()
DGV.DataSource = mBSWith CBox
.DataSource = mMonTable.DefaultView.DisplayMember = _
mMonTable.Columns(1).ColumnName.ValueMember = _
mMonTable.Columns(0).ColumnName
End With
End SubPrivate Sub Form1_Shown _
(ByVal sender As Object, _
ByVal e As System.EventArgs _
) Handles Me.ShownDGV.Columns(0).DefaultCellStyle.Alignment = _
DataGridViewContentAlignment.MiddleRightDGV.AutoResizeColumns()
End SubPrivate Sub CreateData()
Dim i As Integer
Dim DR As DataRowmDT = New DataTable
With mDT
.Columns.Add("ID", GetType(Integer))
.Columns.Add("LText", GetType(String))
.Columns.Add("SText", GetType(String))' Spalte 0 (ID) als Primärschlüsselspalte definieren
.Constraints.Add("PKey", .Columns(0), True)For i = 1 To 12
DR = .NewRow
DR.Item(0) = i
DR.Item(1) = MonthName(i, False)
DR.Item(2) = MonthName(i, True)
.Rows.Add(DR)
Next
.AcceptChanges()
End WithmBS = New BindingSource
mBS.DataSource = mDTmMonTable = New DataTable
With mMonTable
.Columns.Add("ID", GetType(Integer))
.Columns.Add("Text", GetType(String))For i = 1 To 12
DR = .NewRow
DR.Item(0) = i
DR.Item(1) = MonthName(i)
.Rows.Add(DR)
Next
.AcceptChanges()
End With
End SubPrivate Sub CreateControls()
CBox = New ComboBox
With CBox
.Name = "CBox"
.Font = New Font("Arial", 14).SetBounds _
(10, 10, _
Me.ClientSize.Width - 20, _
.Height).Anchor = _
AnchorStyles.Left Or _
AnchorStyles.Top Or _
AnchorStyles.Right.DropDownStyle = _
ComboBoxStyle.DropDownListEnd With
Me.Controls.Add(CBox)DGV = New DataGridView
With DGV
.Name = "DGV"
.SetBounds _
(10, CBox.Bottom + 10, _
Me.ClientSize.Width - 20, _
Me.ClientSize.Height - _
(CBox.Bottom + 70)).Anchor = _
AnchorStyles.Left Or _
AnchorStyles.Top Or _
AnchorStyles.Right Or _
AnchorStyles.Bottom.DefaultCellStyle.Font = _
New Font("Arial", 12).ColumnHeadersDefaultCellStyle.Font = _
New Font("Arial", 8, FontStyle.Bold)End With
Me.Controls.Add(DGV)btnFirst = New Button
With btnFirst
.Name = "btnFirst".SetBounds _
(10, DGV.Bottom + 10, _
40, 40).Text = "|<"
.Anchor = _
AnchorStyles.Left Or _
AnchorStyles.Bottom
End With
Me.Controls.Add(btnFirst)btnPrevious = New Button
With btnPrevious
.Name = "btnPrevious".SetBounds _
(btnFirst.Right + 2, _
btnFirst.Top, _
40, 40).Text = "<"
.Anchor = _
AnchorStyles.Left Or _
AnchorStyles.BottomEnd With
Me.Controls.Add(btnPrevious)btnNext = New Button
With btnNext
.Name = "btnNext".SetBounds _
(btnPrevious.Right + 2, _
btnFirst.Top, _
40, 40).Text = ">"
.Anchor = _
AnchorStyles.Left Or _
AnchorStyles.BottomEnd With
Me.Controls.Add(btnNext)btnLast = New Button
With btnLast
.Name = "btnLast".SetBounds _
(btnNext.Right + 2, _
btnFirst.Top, _
40, 40).Text = ">|"
.Anchor = _
AnchorStyles.Left Or _
AnchorStyles.BottomEnd With
Me.Controls.Add(btnLast)
End SubPrivate Sub NavButton_Click _
(ByVal sender As Object, _
ByVal e As System.EventArgs _
) Handles _
btnFirst.Click, _
btnPrevious.Click, _
btnNext.Click, _
btnLast.ClickSelect Case True
Case sender Is btnFirst
mBS.Position = 0Case sender Is btnPrevious
mBS.Position -= 1Case sender Is btnNext
mBS.Position += 1Case sender Is btnLast
mBS.Position = mBS.Count - 1End Select
End Sub
Private Sub mBS_PositionChanged _
(ByVal sender As Object, _
ByVal e As System.EventArgs _
) Handles mBS.PositionChangedDim DRV As DataRowView = _
DirectCast(mBS.Current, DataRowView)' Werte aus der DataRowView des akt.
' ausgewählten Datensatzes lesen:
Me.Text = _
DRV.Item(0).ToString & " " & _
DRV.Item(1).ToString & " " & _
DRV.Item(2).ToStringEnd Sub
Private Sub DGV_CurrentCellChanged _
(ByVal sender As Object, _
ByVal e As System.EventArgs _
) Handles DGV.CurrentCellChanged' Werte aus DGV.CurrentRow.Cells(x) lesen:
If DGV.CurrentRow IsNot Nothing Then
Dim Buffer As String
With DGV.CurrentRow
Buffer = _
(DGV.CurrentRow.Cells(0).Value.ToString & " " & _
DGV.CurrentRow.Cells(1).Value.ToString & " " & _
DGV.CurrentRow.Cells(2).Value.ToString)
End With
Console.WriteLine(Buffer)
End If
End SubPrivate Sub CBox_SelectedIndexChanged _
(ByVal sender As Object, _
ByVal e As System.EventArgs _
) Handles CBox.SelectedIndexChangedDim ID As Integer
Dim RowNum As IntegerID = _
CInt _
(DirectCast _
(CBox.SelectedItem, _
DataRowView).Item(0))' Zeilennummer mit der gesuchten ID ermitteln
RowNum = mBS.Find("ID", ID)If RowNum > -1 Then
' bisherige Zeilenmarkierungen zurücksetzen
Do While DGV.SelectedRows.Count > 0
DGV.SelectedRows(0).Selected = False
Loop
' Zeile mit RowNum markieren
DGV.Rows(RowNum).Selected = True
' markierte Zeile in sichtbaren Bereich scrollen
DGV.FirstDisplayedScrollingRowIndex = RowNum
End If
End Sub
End Class
' \ \ \ E N T ENach dem Programmstart siehst Du die Form1, diesmal mit einer
ComboBox (CBox), einem DataGridView (DGV) und den vom
vorigen Beispiel schon bekannten Navigationsbuttons.Mit jeder neuen Auswahl in der ComboBox wird der zur dieser
Auswahl (ID) passende Datensatz im DGV markiert, der
Datensatzmarkierer (Pfeil) bleibt auf dem bisher gewählten
Datensatz.Gruß aus St.Georgen
Peter Götz
www.gssg.de (mit VB-Tipps u. Beispielprogrammen)- Als Antwort markiert Thorsten DörflerModerator Donnerstag, 21. April 2011 07:02
Alle Antworten
-
Hallo,
wie kann ich eine Zeile in einem DataGridView markieren, so das
ich Sie gleich auslesen kann!? Momentan muss ich den Mouse
Cursor auf die gewünschte Zeile setzen und dann Linke Maustaste
klicken damit das aufgerufen wird:
Private Sub DataGridView1_RowHeaderMouseClick _
(ByVal sender As Object, _
ByVal e As System.Windows.Forms.DataGridViewCellMouseEventArgs _
) Handles DataGridView1.RowHeaderMouseClick
Also um es kurz zu sagen möchte ich per Code eine Zeile im DGV
markieren(Dreieickspfeil) und auslesen.Im nachfolgenden Beispiel siehst Du wie Du einen beliebigen
Datensatz im DGV resp. in der dem DGV zugeordneten DataSource
auswählen kannst und auch, wie Du an die Feldwerte des
ausgewählten Datensatzes herankommst.Kopiere nachfolgenden Code einfach in ein leeres Formmodul (Form1.vb)
' / / / Beginn Code
Public Class Form1
Private mDT As DataTable
Private WithEvents mBS As BindingSourcePrivate WithEvents DGV As DataGridView
Private WithEvents btnFirst As Button
Private WithEvents btnPrevious As Button
Private WithEvents btnNext As Button
Private WithEvents btnLast As ButtonPrivate Sub Form1_Load _
(ByVal sender As System.Object, _
ByVal e As System.EventArgs _
) Handles MyBase.LoadCreateControls()
CreateData()
DGV.DataSource = mBSEnd Sub
Private Sub Form1_Shown _
(ByVal sender As Object, _
ByVal e As System.EventArgs _
) Handles Me.ShownDGV.Columns(0).DefaultCellStyle.Alignment = _
DataGridViewContentAlignment.MiddleRightDGV.AutoResizeColumns()
End SubPrivate Sub CreateData()
Dim i As Integer
Dim DR As DataRowmDT = New DataTable
With mDT
.Columns.Add("ID", GetType(Integer))
.Columns.Add("LText", GetType(String))
.Columns.Add("SText", GetType(String))For i = 1 To 12
DR = .NewRow
DR.Item(0) = i
DR.Item(1) = MonthName(i, False)
DR.Item(2) = MonthName(i, True)
.Rows.Add(DR)
Next
.AcceptChanges()
End WithmBS = New BindingSource
mBS.DataSource = mDT
End SubPrivate Sub CreateControls()
DGV = New DataGridView
With DGV
.Name = "DGV"
.SetBounds _
(10, 10, _
Me.ClientSize.Width - 20, _
Me.ClientSize.Height - 70).Anchor = _
AnchorStyles.Left Or _
AnchorStyles.Top Or _
AnchorStyles.Right Or _
AnchorStyles.Bottom.DefaultCellStyle.Font = _
New Font("Arial", 12).ColumnHeadersDefaultCellStyle.Font = _
New Font("Arial", 8, FontStyle.Bold)End With
Me.Controls.Add(DGV)btnFirst = New Button
With btnFirst
.Name = "btnFirst"
.SetBounds(10, DGV.Bottom + 10, 40, 40)
.Text = "|<"
.Anchor = AnchorStyles.Left Or AnchorStyles.Bottom
End With
Me.Controls.Add(btnFirst)btnPrevious = New Button
With btnPrevious
.Name = "btnPrevious"
.SetBounds(btnFirst.Right + 2, btnFirst.Top, 40, 40)
.Text = "<"
.Anchor = AnchorStyles.Left Or AnchorStyles.Bottom
End With
Me.Controls.Add(btnPrevious)btnNext = New Button
With btnNext
.Name = "btnNext"
.SetBounds(btnPrevious.Right + 2, btnFirst.Top, 40, 40)
.Text = ">"
.Anchor = AnchorStyles.Left Or AnchorStyles.Bottom
End With
Me.Controls.Add(btnNext)btnLast = New Button
With btnLast
.Name = "btnLast"
.SetBounds(btnNext.Right + 2, btnFirst.Top, 40, 40)
.Text = ">|"
.Anchor = AnchorStyles.Left Or AnchorStyles.Bottom
End With
Me.Controls.Add(btnLast)
End SubPrivate Sub NavButton_Click _
(ByVal sender As Object, _
ByVal e As System.EventArgs _
) Handles _
btnFirst.Click, _
btnPrevious.Click, _
btnNext.Click, _
btnLast.ClickSelect Case True
Case sender Is btnFirst
mBS.Position = 0Case sender Is btnPrevious
mBS.Position -= 1Case sender Is btnNext
mBS.Position += 1Case sender Is btnLast
mBS.Position = mBS.Count - 1End Select
End Sub
Private Sub mBS_PositionChanged _
(ByVal sender As Object, _
ByVal e As System.EventArgs _
) Handles mBS.PositionChangedDim DRV As DataRowView = _
DirectCast(mBS.Current, DataRowView)' Werte aus der DataRowView des akt.
' ausgewählten Datensatzes lesen:
Me.Text = _
DRV.Item(0).ToString & " " & _
DRV.Item(1).ToString & " " & _
DRV.Item(2).ToStringEnd Sub
Private Sub DGV_CurrentCellChanged _
(ByVal sender As Object, _
ByVal e As System.EventArgs _
) Handles DGV.CurrentCellChanged' Werte aus DGV.CurrentRow.Cells(x) lesen:
If DGV.CurrentRow IsNot Nothing Then
Dim Buffer As String
With DGV.CurrentRow
Buffer = _
(DGV.CurrentRow.Cells(0).Value.ToString & " " & _
DGV.CurrentRow.Cells(1).Value.ToString & " " & _
DGV.CurrentRow.Cells(2).Value.ToString)
End With
Console.WriteLine(Buffer)
End If
End Sub
End Class
' \ \ \ E N T ENach dem Programmstart siehst Du die Form1 mit einem DataGridView
und vier Buttons, mit denen Du im Datenbestand navigieren kannst.
Ein Klick auf einen dieser Buttons führt Code aus, der den ersten,
vorhergehenden, nächsten oder letzten Datensatz markiert.In Sub mBS_PositionChanged() wird direkt auf die akt. DataRowView
der DGV.DataSource zugegriffen.In Sub DGVC_CurrentCellChanged wird auf DGV.CurrentRow.Cells(x)
zugegriffen.Die Nummer der akt. ausgewählten Zeile bekommst Du mit
Dim RowNumber as integer = mBS.Position
wobei die erste Zeile den Wert 0 und die letzte Zeile den
Wert mBS.Count-1 hat.
Ist keine Zeile ausgewählt, dann liefert mBS.Position den Wert -1.Mit
mBS.Position = Zeilennummer
kannst Du eine beliebige Zeilennummer innerhalb des
Datenbestandes auswählen.Mehr Beispiele mit dem DataGridView findest Du unter
www.gssg.de -> Visual Basic -> VB.net
-> DataGridViewGruß aus St.Georgen
Peter Götz
www.gssg.de (mit VB-Tipps u. Beispielprogrammen)- Als Antwort vorgeschlagen Okeanos85 Dienstag, 19. Oktober 2010 06:07
- Als Antwort markiert Thorsten DörflerModerator Donnerstag, 21. April 2011 07:01
-
Hallo,
also in meiner Anwendung habe ich die daten über eine Binding Source vorliegen. Ist das in Ihrem Fall ebenso?
-BindingSource hat u.a. 4 Methoden: MoveFirst, MoveNext, MoveLast, MovePrevious
-das Event "SelectionChanged" eignet sich dann ideal zum verarbeiten der Daten
-über sender.SelectedRows(0) bekommt man dan die aktuelle Zeile
MfG
Okeanos
-
Hallo,
also in meiner Anwendung habe ich die daten über eine
Binding Source vorliegen. Ist das in Ihrem Fall ebenso?Ich verstehe die Frage nicht so recht.
Im Code aus meinem vorigen Posting ist doch deutlich
eine DeklarationPrivate WithEvents mBS As BindingSource
zu erkennen und in der Sub CreateData wird per
mBS = New BindingSource
mBS.DataSource = mDTeine Instanz einer BindingSource erstellt und dieser
die DataTable mDT als DataSource zugewiesen. ´
Das DataGridView (DGV) wird dann in der
Sub Form1_Load mitDGV.DataSource = mBS
an diese BindingSource gebunden.
Hast Du das Beispiel denn nicht ausprobiert und
den Code angesehen?-BindingSource hat u.a. 4 Methoden: MoveFirst,
MoveNext, MoveLast, MovePreviousJa, die nichts anderes machen als
With mBS
.Position = 0
.Position - = 1
.Position + = 1
.Position = .Count - 1
End WithDer Ereignishandler Sub NavButton_Click() aus meinem
Beispiel könnte also genausogut so aussehen:Private Sub NavButton_Click _
(ByVal sender As Object, _
ByVal e As System.EventArgs _
) Handles _
btnFirst.Click, _
btnPrevious.Click, _
btnNext.Click, _
btnLast.ClickSelect Case True
Case sender Is btnFirst
'mBS.Position = 0
mBS.MoveFirst()Case sender Is btnPrevious
'mBS.Position -= 1
mBS.MovePrevious()Case sender Is btnNext
'mBS.Position += 1
mBS.MoveNext()Case sender Is btnLast
'mBS.Position = mBS.Count - 1
mBS.MoveLast()End Select
End SubIch habe bewusst die Eigenschaft .Position verwendet um zu
zeigen, dass man aus dem Programmcode heraus mit
BindingSource.Position eben zu jedem beliebigen Datensatz
wechseln kann.Will man z.B. zum 25. Datensatz wechseln dann schreibt man
ebenBindingSource.Position = 24
24 deshalb, weil .Position Nullbasiert ist, also beim Wert 0 zu
zählen beginnt.-das Event "SelectionChanged" eignet sich dann ideal zum
verarbeiten der DatenDGV_SelectionChanged wir zwar auch ausgelöst, wenn man einen
Zeilenwechsel vornimmt, aber auch dann, wenn z.B. innerhalb einer
Zeile in eine andere Zelle gewechselt wird oder wenn innerhalb einer
Zeile mehrere Zellen markiert werden bzw. eben immer dann, wenn
sich der Zustand der jeweils akt. Markierung, egal ob mehrere Zeilen
oder mehrere Zellen, ändert.Das Ereignis BindingSource.PositionChanged dagegen signalisiert
eindeutig einen Datensatzwechsel (Zeilenwechsel). Man ist mit
BindingSource.PositionChanged "näher am Geschehen".-über sender.SelectedRows(0) bekommt man dan die aktuelle Zeile
DataGridView.SelectedRows liefert eine Auflistung aller selektierten
Zeilen. Dies können Null Zeilen sein (DGV.SelectedRows.Count = 0)
oder auch mehrere (DGV.SelectedRows.Count = > 0).
DGV.SelectedRows(0) ist dann die Zeile mit dem Zeilenmarkierer
(Pfeil) am linken Rand.Auch hier ist man mit
Dim DRV as DataRowView
DRV = Directcast(mBS.Current, DataRowView)viel näher am Geschehen.
Gruß aus St.Georgen
Peter Götz
www.gssg.de (mit VB-Tipps u. Beispielprogrammen) -
Hallo,
das der Pfeil beim Wechseln der Datensätze wandert sehe ich, aber ich möchte gerne das die ganze Zeile markiert wird und dann Pfeil auf diese Zeile gesetzt wird.
Momentan habe ich folgendes:
Private Sub ListBox1_SelectedValueChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles ListBox1.SelectedValueChanged ListBox3.Visible = False ListBox3.Items.Clear() dv = New DataView(dt) If dv.RowFilter = "" Then DataGridView1.DataSource = dt End If Auswahl() End Sub Sub Auswahl() Dim Eintrag As String Dim Von, Bis As Integer Dim Zeilenwert As Integer Eintrag = ListBox1.SelectedItem Von = Eintrag.LastIndexOf("_") + 1 Bis = Eintrag.LastIndexOf(".") CulpID = Eintrag.Substring(Von, Bis - Von) For Each Zeile As DataGridViewRow In DataGridView1.Rows If Zeile.Cells("ID").Value = ID Then Zeilenwert = Zeile.Index DataGridView1.Rows(Zeilenwert).Selected = True DataGridView1.FirstDisplayedScrollingRowIndex = Zeilenwert Exit For End If Next End Sub
Somit kann ich wenn ich in meiner Listbox einen anderen Eintrag anklicke direkt im Datagridview in die passende Zeile springen, jedoch ohne das der Pfeil der Selektion davor erscheint. Hinterlegt ist die Zeile.
LG
Chris
-
Hallo,
das der Pfeil beim Wechseln der Datensätze wandert sehe ich,
aber ich möchte gerne das die ganze Zeile markiert wird und
dann Pfeil auf diese Zeile gesetzt wird.Wenn die jeweils akt. ausgewählte Zeile vollständig markiert sein
soll, dann setzeDGV.SelectionMode = DataGridViewSelectionMode.FullRowSelect
Wie wäre es mal mit ein bisschen Online-Hilfe lesen? ;-)
Momentan habe ich folgendes:
Private Sub ListBox1_SelectedValueChanged _ (ByVal sender As Object, _ ByVal e As System.EventArgs _ ) Handles ListBox1.SelectedValueChanged ListBox3.Visible = False ListBox3.Items.Clear() dv = New DataView(dt) If dv.RowFilter = "" ThenWas soll das werden? Wenn Du eine neue DataView (dv) erstellst, dann ist dv.RowFilter immer erst mal = "". Wozu also diese Abfrage?
DataGridView1.DataSource = dt
Wer oder was ist dt? Ich rate mal, dass es eine DataTable ist. Wenn das so ist, wie und wo erstellst Du diese DataTable? Warum bindest Du DataGridView1 an dt und nicht an die DataView dv?
End If Auswahl() End Sub Sub Auswahl() Dim Eintrag As String Dim Von, Bis As Integer Dim Zeilenwert As Integer Eintrag = ListBox1.SelectedItem Von = Eintrag.LastIndexOf("_") + 1 Bis = Eintrag.LastIndexOf(".") CulpID = Eintrag.Substring(Von, Bis - Von) For Each Zeile As DataGridViewRow In DataGridView1.Rows If Zeile.Cells("ID").Value = ID Then Zeilenwert = Zeile.Index DataGridView1.Rows(Zeilenwert).Selected = True DataGridView1.FirstDisplayedScrollingRowIndex = Zeilenwert Exit For End If Next End Sub
Ich verstehe nicht so recht, was dies Sub Auswahl() bewirken soll,
da nicht klar ist, ob und woran Deine Listbox gebunden ist, bzw.
welche Daten sie sonst enthält und woher sie diese bekommt.Somit kann ich wenn ich in meiner Listbox einen anderen Eintrag
anklicke direkt im Datagridview in die passende Zeile springen,Ich verstehe hier nur "Bahnhof".
Was enthält denn so ein Listbox-Eintrag? Oder anders gefragt,
wie (Code) konkret sieht ein Listbox1.SelectedItem aus?jedoch ohne das der Pfeil der Selektion davor erscheint.
Hinterlegt ist die Zeile.Auch hier grosses Fragezeichen.
Was willst Du erreichen?
Soll im DGV der akt. Datensatz, also der mit dem Pfeil
z.B. der Datensatz aus der Zeile 3 sein, jedoch sollen die
Zellen des Datensatzes 7 markiert sein?
...oder wie oder was?Gruß aus St.Georgen
Peter Götz
www.gssg.de (mit VB-Tipps u. Beispielprogrammen) -
Hallo nochmal,
beim vorigen Posting hat diese unselige Forensoftware
wieder mal alles kaputtformatiert.
Hier nochmal das Ganze in jetzt hoffentlich lesbarer Form.das der Pfeil beim Wechseln der Datensätze wandert sehe ich,
aber ich möchte gerne das die ganze Zeile markiert wird und
dann Pfeil auf diese Zeile gesetzt wird.Wenn die jeweils akt. ausgewählte Zeile vollständig markiert sein
soll, dann setzeDGV.SelectionMode = DataGridViewSelectionMode.FullRowSelect
Wie wäre es mal mit ein bisschen Online-Hilfe lesen? ;-)
Momentan habe ich folgendes:
Private Sub ListBox1_SelectedValueChanged _ (ByVal sender As Object, _ ByVal e As System.EventArgs _ ) Handles ListBox1.SelectedValueChanged ListBox3.Visible = False ListBox3.Items.Clear() dv = New DataView(dt) If dv.RowFilter = "" ThenWas soll das werden? Wenn Du eine neue DataView (dv) erstellst,
dann ist dv.RowFilter immer erst mal = "".
Wozu also diese Abfrage?DataGridView1.DataSource = dt
Wer oder was ist dt? Ich rate mal, dass es eine DataTable ist.
Wenn das so ist, wie und wo erstellst Du diese DataTable?
Warum bindest Du DataGridView1 an dt und nicht an die DataView dv?End If
Auswahl()
End Sub
Sub Auswahl()
Dim Eintrag As String
Dim Von, Bis As Integer
Dim Zeilenwert As Integer Eintrag = ListBox1.SelectedItem
Von = Eintrag.LastIndexOf("_") + 1
Bis = Eintrag.LastIndexOf(".")
CulpID = Eintrag.Substring(Von, Bis - Von)
For Each Zeile As DataGridViewRow In DataGridView1.Rows
If Zeile.Cells("ID").Value = ID Then
Zeilenwert = Zeile.Index
DataGridView1.Rows(Zeilenwert).Selected = True
DataGridView1.FirstDisplayedScrollingRowIndex = Zeilenwert
Exit For
End If
Next
End SubIch verstehe nicht so recht, was dies Sub Auswahl() bewirken soll,
da nicht klar ist, ob und woran Deine Listbox gebunden ist, bzw.
welche Daten sie sonst enthält und woher sie diese bekommt.Somit kann ich wenn ich in meiner Listbox einen anderen Eintrag
anklicke direkt im Datagridview in die passende Zeile springen,Ich verstehe hier nur "Bahnhof".
Was enthält denn so ein Listbox-Eintrag? Oder anders gefragt,
wie (Code) konkret sieht ein Listbox1.SelectedItem aus?jedoch ohne das der Pfeil der Selektion davor erscheint.
Hinterlegt ist die Zeile.Auch hier grosses Fragezeichen.
Was willst Du erreichen?
Soll im DGV der akt. Datensatz, also der mit dem Pfeil
z.B. der Datensatz aus der Zeile 3 sein, jedoch sollen die
Zellen des Datensatzes 7 markiert sein?
...oder wie oder was?Gruß aus St.Georgen
Peter Götz
www.gssg.de (mit VB-Tipps u. Beispielprogrammen) -
Hallo,
meine Listbox ist gefüllt mit Text nach dem Schema:
Nachname_Vorname_ID
dieser ensteht, da ich TXT Dateien nach bestimmten Suchbegriffen mittels RegEx durchsuche. Sollte ein Treffer vorkommen bildet mein Programm einen Listbox Eintag nach folgenden Code:
If TrefferJaNein = True Then ' Wenn Schleife NICHT vorzeitig beendet wurde 'ListBox1.Items.Add(Datei) Dim Teil1 As String Teil1 = System.IO.Path.GetDirectoryName(Datei) ListBox1.Items.Add(".." & Datei.Substring(Teil1.Length)) Label6.Text = ListBox1.Items.Count Application.DoEvents() End If
Dies geschieht natürlich in einer Schleife für mehere tausend Textdateien. Wenn sämtliche Trefferdateien in der Listbox abgebildet sind kann ich per:
Private Sub ListBox1_SelectedValueChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles ListBox1.SelectedValueChanged ListBox3.Visible = False ListBox3.Items.Clear() 'dv = New DataView(dt) 'If dv.RowFilter = "" Then DataGridView1.DataSource = dt 'End If Auswahl() End Sub
und
Sub Auswahl() Dim Eintrag As String Dim Von, Bis As Integer Dim Zeilenwert As Integer Eintrag = ListBox1.SelectedItem Von = Eintrag.LastIndexOf("_") + 1 Bis = Eintrag.LastIndexOf(".") <br/> ID = Eintrag.Substring(Von, Bis - Von) For Each Zeile As DataGridViewRow In DataGridView1.Rows If Zeile.Cells("ID").Value = ID Then Zeilenwert = Zeile.Index 'DataGridView1.Rows(Zeilenwert).Selected = True DataGridView1.Rows(Zeilenwert).Selected = DataGridViewSelectionMode.FullRowSelect DataGridView1.FirstDisplayedScrollingRowIndex = Zeilenwert Exit For End If Next End Sub
direkt im DataGridView in den passenden Datensatz welcher aus dem Listbox Eintrag extrahiert wird springen.
Also der Datensatz: ..\Nachname_Vorname_ID wird zerlegt und die ID für die relvante Suche im DataGridView herangezogen.
Dann wird die dementsprechende Zeile im DataGridView markiert. Jedoch ohne das dieser Zeile "der Pfeil" sprich der Datensatzmarker voransteht.
Ich möchte also in der Listbox ein Eintrag auswählen, dieser soll dann im DataGridview angezeigt werden und gleichzeitig auf diesen Datensatz der Marker gesetzt werden.
Sorry ist halt ein wenig schwierig zu beschreiben.
LG Chris
-
Hallo nochmal,
ich weiss nicht, warum diese Forensoftware heute glaubt,
alles und jedes nach Gutdünken kaputtformatieren zu müssen,
deshalb ein erneuter Versuch, mein Posting lesbar auf den
Weg zu bringen.meine Listbox ist gefüllt mit Text nach dem Schema:
Nachname_Vorname_ID
dieser ensteht, da ich TXT Dateien nach bestimmten Suchbegriffen mittels
RegEx durchsuche. Sollte ein Treffer vorkommen bildet mein Programm
einen Listbox Eintag nach folgenden Code:
[code]
If TrefferJaNein = True Then _
' Wenn Schleife NICHT vorzeitig beendet wurde
'ListBox1.Items.Add(Datei)
Dim Teil1 As String
Teil1 = System.IO.Path.GetDirectoryName(Datei)
ListBox1.Items.Add(".." & Datei.Substring(Teil1.Length))
Label6.Text = ListBox1.Items.Count
Application.DoEvents()
Was soll dieses .DoEvents bewirken?
End If
Dies geschieht natürlich in einer Schleife für mehere tausend Textdateien.
Und wie lange dauert es bis Du mehrere tausend Textdateien nach
bestimmten Begriffen durchsucht hast?Wenn sämtliche Trefferdateien in der Listbox abgebildet sind kann ich per:
Private Sub ListBox1_SelectedValueChanged _
(ByVal sender As Object, _
ByVal e As System.EventArgs _
) Handles ListBox1.SelectedValueChanged
ListBox3.Visible = False
ListBox3.Items.Clear()
'dv = New DataView(dt)
'If dv.RowFilter = "" Then
DataGridView1.DataSource = dtWie und wo dt deklariert, erstellt und mit welchen Daten gefüllt wird
sehe ich bisher immer noch nicht.'End If
Auswahl()
End Sub
und
Sub Auswahl()
Dim Eintrag As String
Dim Von, Bis As Integer
Dim Zeilenwert As Integer
Eintrag = ListBox1.SelectedItem
Von = Eintrag.LastIndexOf("_") + 1
Bis = Eintrag.LastIndexOf(".") <br/>
ID = Eintrag.Substring(Von, Bis - Von)
For Each Zeile As DataGridViewRow In DataGridView1.Rows
If Zeile.Cells("ID").Value = ID Then
Zeilenwert = Zeile.Index
'DataGridView1.Rows(Zeilenwert).Selected = True
DataGridView1.Rows(Zeilenwert).Selected = _
DataGridViewSelectionMode.FullRowSelect
DataGridView1.FirstDisplayedScrollingRowIndex = Zeilenwert
Exit For
End If
Next
End Sub
direkt im DataGridView in den passenden Datensatz welcher aus
dem Listbox Eintrag extrahiert wird springen.Eine Zeile mit einer bestimmten ID im Datenbestand einer DataTable
kann man deutlich einfacher und schneller mit BindingSource.Find()
ermitteln.
Voraussetzung dafür ist, dass man vorher die Spalte ID als
Primärschlüssel definiert hat (s.Code im Beispiel unten).Also der Datensatz: ..\Nachname_Vorname_ID wird zerlegt und
die ID für die relvante Suche im DataGridView herangezogen.
Dann wird die dementsprechende Zeile im DataGridView markiert.
Jedoch ohne das dieser Zeile "der Pfeil" sprich der Datensatzmarker
voransteht.
Ich möchte also in der Listbox ein Eintrag auswählen, dieser soll dann
im DataGridview angezeigt werden und gleichzeitig auf diesen Datensatz
der Marker gesetzt werden.Welcher "Marker" soll auf den Datensatz gesetzt werden?
Im vorigen Satz hast Du gefordert, dass der "Pfeil" nicht auf
diesem Datensatz stehen soll.
Was denn nun?Sorry ist halt ein wenig schwierig zu beschreiben.
Das ist meist ein Zeichen dafür, dass das gewählte Programmkonzept
möglicherweise doch noch nicht so ganz gründlich durchdacht ist.Hier mal mein früheres Beispiel mit einer Erweiterung um eine ComboBox
in welcher nach Auswahl eines bestimmten Eintrages die hierzu passende
Zeile im DGV markiert wird, der Datensatzmarkierer (Pfeil) jedoch auf der
bisher gewählten Zeile verbleibt.' / / / Code in Formmodul (Form1.vb)
Public Class Form1
Private WithEvents CBox As ComboBox
Private mDT As DataTable
Private WithEvents mBS As BindingSourcePrivate mMonTable As DataTable
Private WithEvents DGV As DataGridView
Private WithEvents btnFirst As Button
Private WithEvents btnPrevious As Button
Private WithEvents btnNext As Button
Private WithEvents btnLast As ButtonPrivate Sub Form1_Load _
(ByVal sender As System.Object, _
ByVal e As System.EventArgs _
) Handles MyBase.LoadCreateControls()
CreateData()
DGV.DataSource = mBSWith CBox
.DataSource = mMonTable.DefaultView.DisplayMember = _
mMonTable.Columns(1).ColumnName.ValueMember = _
mMonTable.Columns(0).ColumnName
End With
End SubPrivate Sub Form1_Shown _
(ByVal sender As Object, _
ByVal e As System.EventArgs _
) Handles Me.ShownDGV.Columns(0).DefaultCellStyle.Alignment = _
DataGridViewContentAlignment.MiddleRightDGV.AutoResizeColumns()
End SubPrivate Sub CreateData()
Dim i As Integer
Dim DR As DataRowmDT = New DataTable
With mDT
.Columns.Add("ID", GetType(Integer))
.Columns.Add("LText", GetType(String))
.Columns.Add("SText", GetType(String))' Spalte 0 (ID) als Primärschlüsselspalte definieren
.Constraints.Add("PKey", .Columns(0), True)For i = 1 To 12
DR = .NewRow
DR.Item(0) = i
DR.Item(1) = MonthName(i, False)
DR.Item(2) = MonthName(i, True)
.Rows.Add(DR)
Next
.AcceptChanges()
End WithmBS = New BindingSource
mBS.DataSource = mDTmMonTable = New DataTable
With mMonTable
.Columns.Add("ID", GetType(Integer))
.Columns.Add("Text", GetType(String))For i = 1 To 12
DR = .NewRow
DR.Item(0) = i
DR.Item(1) = MonthName(i)
.Rows.Add(DR)
Next
.AcceptChanges()
End With
End SubPrivate Sub CreateControls()
CBox = New ComboBox
With CBox
.Name = "CBox"
.Font = New Font("Arial", 14).SetBounds _
(10, 10, _
Me.ClientSize.Width - 20, _
.Height).Anchor = _
AnchorStyles.Left Or _
AnchorStyles.Top Or _
AnchorStyles.Right.DropDownStyle = _
ComboBoxStyle.DropDownListEnd With
Me.Controls.Add(CBox)DGV = New DataGridView
With DGV
.Name = "DGV"
.SetBounds _
(10, CBox.Bottom + 10, _
Me.ClientSize.Width - 20, _
Me.ClientSize.Height - _
(CBox.Bottom + 70)).Anchor = _
AnchorStyles.Left Or _
AnchorStyles.Top Or _
AnchorStyles.Right Or _
AnchorStyles.Bottom.DefaultCellStyle.Font = _
New Font("Arial", 12).ColumnHeadersDefaultCellStyle.Font = _
New Font("Arial", 8, FontStyle.Bold)End With
Me.Controls.Add(DGV)btnFirst = New Button
With btnFirst
.Name = "btnFirst".SetBounds _
(10, DGV.Bottom + 10, _
40, 40).Text = "|<"
.Anchor = _
AnchorStyles.Left Or _
AnchorStyles.Bottom
End With
Me.Controls.Add(btnFirst)btnPrevious = New Button
With btnPrevious
.Name = "btnPrevious".SetBounds _
(btnFirst.Right + 2, _
btnFirst.Top, _
40, 40).Text = "<"
.Anchor = _
AnchorStyles.Left Or _
AnchorStyles.BottomEnd With
Me.Controls.Add(btnPrevious)btnNext = New Button
With btnNext
.Name = "btnNext".SetBounds _
(btnPrevious.Right + 2, _
btnFirst.Top, _
40, 40).Text = ">"
.Anchor = _
AnchorStyles.Left Or _
AnchorStyles.BottomEnd With
Me.Controls.Add(btnNext)btnLast = New Button
With btnLast
.Name = "btnLast".SetBounds _
(btnNext.Right + 2, _
btnFirst.Top, _
40, 40).Text = ">|"
.Anchor = _
AnchorStyles.Left Or _
AnchorStyles.BottomEnd With
Me.Controls.Add(btnLast)
End SubPrivate Sub NavButton_Click _
(ByVal sender As Object, _
ByVal e As System.EventArgs _
) Handles _
btnFirst.Click, _
btnPrevious.Click, _
btnNext.Click, _
btnLast.ClickSelect Case True
Case sender Is btnFirst
mBS.Position = 0Case sender Is btnPrevious
mBS.Position -= 1Case sender Is btnNext
mBS.Position += 1Case sender Is btnLast
mBS.Position = mBS.Count - 1End Select
End Sub
Private Sub mBS_PositionChanged _
(ByVal sender As Object, _
ByVal e As System.EventArgs _
) Handles mBS.PositionChangedDim DRV As DataRowView = _
DirectCast(mBS.Current, DataRowView)' Werte aus der DataRowView des akt.
' ausgewählten Datensatzes lesen:
Me.Text = _
DRV.Item(0).ToString & " " & _
DRV.Item(1).ToString & " " & _
DRV.Item(2).ToStringEnd Sub
Private Sub DGV_CurrentCellChanged _
(ByVal sender As Object, _
ByVal e As System.EventArgs _
) Handles DGV.CurrentCellChanged' Werte aus DGV.CurrentRow.Cells(x) lesen:
If DGV.CurrentRow IsNot Nothing Then
Dim Buffer As String
With DGV.CurrentRow
Buffer = _
(DGV.CurrentRow.Cells(0).Value.ToString & " " & _
DGV.CurrentRow.Cells(1).Value.ToString & " " & _
DGV.CurrentRow.Cells(2).Value.ToString)
End With
Console.WriteLine(Buffer)
End If
End SubPrivate Sub CBox_SelectedIndexChanged _
(ByVal sender As Object, _
ByVal e As System.EventArgs _
) Handles CBox.SelectedIndexChangedDim ID As Integer
Dim RowNum As IntegerID = _
CInt _
(DirectCast _
(CBox.SelectedItem, _
DataRowView).Item(0))' Zeilennummer mit der gesuchten ID ermitteln
RowNum = mBS.Find("ID", ID)If RowNum > -1 Then
' bisherige Zeilenmarkierungen zurücksetzen
Do While DGV.SelectedRows.Count > 0
DGV.SelectedRows(0).Selected = False
Loop
' Zeile mit RowNum markieren
DGV.Rows(RowNum).Selected = True
' markierte Zeile in sichtbaren Bereich scrollen
DGV.FirstDisplayedScrollingRowIndex = RowNum
End If
End Sub
End Class
' \ \ \ E N T ENach dem Programmstart siehst Du die Form1, diesmal mit einer
ComboBox (CBox), einem DataGridView (DGV) und den vom
vorigen Beispiel schon bekannten Navigationsbuttons.Mit jeder neuen Auswahl in der ComboBox wird der zur dieser
Auswahl (ID) passende Datensatz im DGV markiert, der
Datensatzmarkierer (Pfeil) bleibt auf dem bisher gewählten
Datensatz.Gruß aus St.Georgen
Peter Götz
www.gssg.de (mit VB-Tipps u. Beispielprogrammen)- Als Antwort markiert Thorsten DörflerModerator Donnerstag, 21. April 2011 07:02