Ereignis DataGridview

24/08/2007 - 08:59 von Norbert Lutz | Report spam
Hallo,

bei welchem Ereignis kann ich die aktuelle ROW der Tabelle auslesen?
Ich will nach einem Click in eine Zelle, auf die gesamte Zeile und beim
Wechsel mit dem Cursor die Werte der neuen Zeile auslesen.

Norbert
 

Lesen sie die antworten

#1 Peter Götz
24/08/2007 - 10:26 | Warnen spam
Hallo Norbert,

bei welchem Ereignis kann ich die aktuelle ROW
der Tabelle auslesen?



Welcher Tabelle?
Meinst Du mit "Tabelle" das was in einem DataGridView
angezeigt wird oder geht es um den Inhalt einer
DataTable?

Ich will nach einem Click in eine Zelle, auf die
gesamte Zeile und beim Wechsel mit dem
Cursor die Werte der neuen Zeile auslesen.



Es gibt mehrere Möglichkeiten, auf die Inhalte von
in DataGridViews gezeigten Datensàtzen zu-
zugreifen. Das hàngt auch z.T. davon ab, was
Du Deinem DataGridview als DataSource
zugewiesen hast.

Im Endeffekt ist die DataSource für ein an
was auch immer gebundenes DataGridView,
immer eine DataView.

Das nachfolgende Beispiel zeigt Dir, welche
Möglichkeiten Du hast auf Inhalte von DataGridView-
Zellen, auf Inhalte von DataView-Items und auch
direkt auf die Inhalte der DataTable (DataRow)
zuzugreifen.

' /// Code in einer leeren Form1
Public Class Form1
Private WithEvents DGV As DataGridView

Private mDT As DataTable
Private mDV As DataView
Private WithEvents mCM As CurrencyManager


Private Sub Form1_Load _
(ByVal sender As Object, _
ByVal e As System.EventArgs _
) Handles Me.Load

' DataGridView erzeugen
DGV = New DataGridView
With DGV
.SetBounds _
(10, 10, _
Me.ClientSize.Width - 20, _
Me.ClientSize.Height - 20)

.Anchor = AnchorStyles.Left Or _
AnchorStyles.Top Or _
AnchorStyles.Right Or _
AnchorStyles.Bottom
End With
Me.Controls.Add(DGV)

CreateData()

' DataGridView an DataView (mDV) binden
' und konfigurieren
With DGV
.DefaultCellStyle.Font = _
New Font("Arial", 12)

.ColumnHeadersDefaultCellStyle.Font = _
New Font("Arial", 8, FontStyle.Bold)

.DataSource = mDV

.Columns(0).DefaultCellStyle.Alignment = _
DataGridViewContentAlignment.MiddleRight

.AutoResizeColumns()
End With
End Sub

Private Sub CreateData()
Dim i As Integer
Dim DR As DataRow

' DataTable erzeugen und mit Daten füllen
mDT = New DataTable
With mDT
.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

' DataView zur DataTable erzeugen
mDV = New DataView(mDT)

' CurrencyManager zur DataView erzeugen
mCM = DirectCast _
(Me.BindingContext(mDV), CurrencyManager)

End Sub

Private Sub DGV_CurrentCellChanged _
(ByVal sender As Object, _
ByVal e As System.EventArgs _
) Handles DGV.CurrentCellChanged

Console.WriteLine _
("DGV_CurrentCellChanged Row: " & _
DGV.CurrentCellAddress.Y.ToString & _
" Col: " & DGV.CurrentCellAddress.X.ToString)

' Zellinhalte direkt aus der akt. DGV-Zeile auslesen
Dim DGVR As DataGridViewRow = DGV.CurrentRow
With DGVR
Console.WriteLine _
(ControlChars.Tab & _
"DataGridViewRow: " & _
DGVR.Cells(0).Value.ToString & " " & _
DGVR.Cells(1).Value.ToString)
End With

' Zellinhalte aus der korrespondierenden
' DataView auslesen
Dim DRV As DataRowView
DRV = mDV.Item(DGV.CurrentCellAddress.Y)
Console.WriteLine _
(ControlChars.Tab & _
"DataRowView (mDV): " & _
DRV.Item(0).ToString & " " & _
DRV.Item(1).ToString)

Console.WriteLine("")
End Sub

Private Sub mCM_PositionChanged _
(ByVal sender As Object, _
ByVal e As System.EventArgs _
) Handles mCM.PositionChanged

Dim DRV As DataRowView
DRV = DirectCast(mCM.Current, DataRowView)

Console.WriteLine _
("mCM_PositionChanged; mCM.Position: " & _
mCM.Position)

' Daten aus akt. Zeile der DataView (mDV) lesen,
' auf die der CurrencyManager in mCM.Current
' einen Verweis liefert.
Console.WriteLine _
(ControlChars.Tab & _
"DataRowView: " & _
DRV.Item(0).ToString & " " & _
DRV.Item(1).ToString)


' Direkt auf die DataRow der DataTable zugreifen
Dim DR As DataRow
DR = DRV.Row
Console.WriteLine( _
ControlChars.Tab & _
"DataRow aus DataTable: " & _
DR.Item(0).ToString & " " & _
DR.Item(1).ToString)

Console.WriteLine("")

End Sub
End Class
' \\\ E N T E

Im obigen Beispiel ist die eigentliche Datenquelle eine
DataTable (mDT), die erst mal mit 12 DataRows
(Monate 1... 12) gefüllt wird.
Zu dieser DataTable wird ein DataView-Objekt (mDV)
erstellt, das dem DataGridView (DGV) spàter als
Datasource zugewiesen wird.
Ein CurrencyManager (mCM) zur DataView (mDV)
liefert Informationen zur jeweils in der DataView akt.
ausgewàhlten Zeile.

DGV_CurrentCellChanged wird ausgelöst, wenn Code
oder der Benutzer zu einer anderen Zelle wechselt,
also auch beim Zeilenwechsel.

Meist ist es sehr nützlich zur DataView, welche hier
dem DataGridView als DataSource zugewiesen
wurde, auch einen CurrencyManager zu erstellen,
da man mit Hilfe von mCM_PositionChanged immer
die gerade akt. Zeile in der zugehörigen DataView
bekommt.
mCM_PositionChanged wird ausgelöst, wenn
Code oder der Benutzer einen Zeilenwechsel
verursachen.

Weitere Beispiele mit dem DataGridView findest
Du unter

www.gssg.de -> Visual Basic -> VB.net


Gruß aus St.Georgen
Peter Götz
www.gssg.de (mit VB-Tipps u. Beispielprogrammen)

Ähnliche fragen