7.10 Steuerelement DataGridView
Zur Darstellung einer einfachen Liste oder der Inhalte eines eindimensionalen Datenfelds sind Listen- und Kombinationsfelder geeignet. Die Inhalte einer Tabelle mit Zeilen und Spalten oder eines zweidimensionalen Datenfelds werden besser in einem Steuerelement vom Typ DataGridView dargestellt. Es ist auch besonders zur Darstellung von Datenbankinhalten, siehe Kapitel 8, »Datenbank-Anwendungen mit ADO.NET«, geeignet. Sie finden es in der Werkzeugsammlung im Bereich Daten.
Im nachfolgend beschriebenen Projekt DataGrid werden Eigenschaften per Code zur Laufzeit eingestellt. Sie könnten viele Eigenschaften allerdings auch schon zur Entwicklungszeit einstellen. Über das kleine Dreieck oben rechts am Steuerelement lässt sich nach dem Einfügen ins Formular und dem Markieren ein Menü öffnen, das zahlreiche Möglichkeiten bietet, siehe Abbildung 7.37.
Abbildung 7.37 DataGrid, Einstellmenü
Zunächst der Start-Inhalt des Grids, in Abbildung 7.38.
Abbildung 7.38 DataGridView, gefüllt
Es folgen die Inhalte der Form1_Load-Prozedur, die für den Start-Inhalt des Grids sorgt:
Public Class Form1
Private Sub Form1_Load(...) Handles MyBase.Load
Dim i As Integer
' Spalten hinzufügen
dgv.Columns.Add("SpName", "Name")
dgv.Columns.Add("SpVorname", "Vorname")
dgv.Columns.Add("SpPersonalnummer", "Personalnummer")
dgv.Columns.Add("SpGehalt", "Gehalt")
dgv.Columns.Add("SpGeburtstag", "Geburtstag")
' Breite einstellen
For i = 0 To dgv.Columns.Count – 1
dgv.Columns(i).Width = 75
Next
' Zeilen hinzufügen
dgv.Rows.Add("Maier", "Hans", 6714,
3500.0, "15.03.1962")
dgv.Rows.Add("Schmitz", "Peter", 81343,
3750.0, "12.04.1958")
dgv.Rows.Add("Mertens", "Julia", 2297,
3621.5, "30.12.1959")
End Sub
[...]
End Class
Listing 7.25 Projekt »DataGrid«, Einstellungen
Zur Erläuterung:
- Das Steuerelement vom Typ DataGridView wird nachfolgend vereinfacht Tabelle genannt. Die Tabelle hat in diesem Projekt den Namen dgv.
- Die Eigenschaft Columns ist eine Collection vom Typ DataGridViewColumnCollection und beinhaltet Informationen über alle Spalten der Tabelle.
- Mithilfe der Methode Add() können der Collection Spalten hinzugefügt werden. Die hier genutzte Überladung dieser Methode erwartet zwei Zeichenketten-Parameter: den Namen der Spalte und den sichtbaren Text der Kopfzeile.
- Die Eigenschaft Count der Columns-Collection liefert die Anzahl der Spalten. Eine einzelne Spalte lässt sich über einen Index ansprechen, dieser beginnt bei 0.
- Einzelne Spalten haben wiederum Eigenschaften. Die Breite kann über die Eigenschaft Width eingestellt werden.
- Die Eigenschaft Rows ist eine Collection vom Typ DataGridViewRowCollection und beinhaltet Informationen über alle Zeilen der Tabelle.
- Mithilfe der Methode Add() können der Collection Zeilen hinzugefügt werden. Die hier genutzte Überladung dieser Methode erwartet einen ParamArray (siehe 4.8.5), also ein Feld beliebiger Größe, von Objekten. In diesem Falle werden jeweils fünf Informationen zu einer Person hinzugefügt.
- Beachten Sie, dass die Zahlen für die Spalte Gehalt im Code mit Dezimalpunkt angegeben werden müssen. Ansonsten werden sie nicht alle als Double-Werte erkannt, und es kommt später beim Sortieren dieser Spalte zu einem Fehler.
- Sie können die boolesche Eigenschaft Selected einiger Objekte auf einen der Werte True oder False stellen. Dann ist das betreffende Objekt vorausgewählt bzw. nicht vorausgewählt. Dies gilt für Rows(Index), Columns(Index) und Cells(Index) innerhalb von Rows(Index).
Hinweis: Beim Hinzufügen einer Spalte wird jeweils eine leere Zelle zum Hinzufügen eines neuen Inhalts erzeugt. Diese ist ebenfalls Bestandteil der Rows-Collection.
Es folgt die Prozedur zum Button Info Spalte:
Public Class Form1
[...]
Private Sub cmdInfoSpalte_Click(...) Handles ...
Dim i As Integer
' Name und Headertext
lblA.Text = "Name: " &
dgv.Columns("SpName").Name & ", Header: " &
dgv.Columns("SpName").HeaderText & vbCrLf
For i = 1 To dgv.Columns.Count – 1
lblA.Text &= "Name: " &
dgv.Columns(i).Name & ", Header: " &
dgv.Columns(i).HeaderText & vbCrLf
Next
End Sub
[...]
End Class
Listing 7.26 Projekt »DataGrid«, Button »Info Spalte«
Zur Erläuterung:
- Als Index für eine einzelne Spalte lässt sich auch der Name der Spalte nutzen.
- Die Eigenschaften Name und Headertext liefern den Namen der Spalte und den sichtbaren Text der Kopfzeile, siehe Abbildung 7.39.
Abbildung 7.39 Button »Info Spalte«
In der Prozedur zum Button Mittelwert werden die Inhalte einzelner Zellen ausgewertet, um den Mittelwert zu errechnen (siehe Abbildung 7.40).
Public Class Form1
[...]
Private Sub cmdMittelwert_Click(...) Handles ...
Dim i As Integer
Dim mw As Double
' Zellen auswerten
lblA.Text = ""
mw = 0
For i = 0 To dgv.Rows.Count – 2
mw += Convert.ToDouble(
dgv.Rows(i).Cells(3).Value)
Next
mw /= dgv.Rows.Count – 1
lblA.Text = "Gehalt, Mittelwert: " & mw
End Sub
[...]
End Class
Listing 7.27 Projekt »DataGrid«, Button »Mittelwert«
Zur Erläuterung:
- Es soll der Mittelwert der Zahlen in der Spalte Gehalt berechnet werden. Dazu muss die Rows-Collection durchlaufen werden. Beachten Sie, dass die letzte Zeile (zum Hinzufügen eines neuen Inhalts) nicht mit eingerechnet wird.
- Eine einzelne Zeile lässt sich innerhalb der Rows-Collection über einen Index ansprechen, dieser beginnt bei 0.
- Die Zellen innerhalb einer Zeile stehen in der Collection Cells. Eine einzelne Zelle innerhalb der Cells-Collection lässt sich wiederum über einen Index ansprechen, dieser beginnt ebenfalls bei 0.
- Der Wert einer Zelle wird über die Eigenschaft Value geliefert. Dabei handelt es sich um einen String, dieser muss umgewandelt werden.
Abbildung 7.40 Button »Mittelwert«
Eine letzte Prozedur reagiert auf das Ereignis Benutzer klickt auf Tabellenzelle. Dabei kann festgestellt werden, um welche Zelle es sich handelt, siehe Abbildung 7.41.
Public Class Form1
[...]
Private Sub dgv_CellClick(sender As Object,
e As DataGridViewCellEventArgs
) Handles dgv.CellClick
' Klick auswerten
lblA.Text = "Zeile: " & e.RowIndex & vbCrLf &
"Spalte: " & e.ColumnIndex & vbCrLf
If e.RowIndex >= 0 And e.ColumnIndex >= 0 Then
lblA.Text &= "Inhalt: " &
dgv.Rows(e.RowIndex).
Cells(e.ColumnIndex).Value
End If
End Sub
End Class
Listing 7.28 Projekt »DataGrid«, Klick auf Zelle
Zur Erläuterung:
- In dem Parameter e der Ereignisprozedur vom Typ DataGridViewCellEventArgs werden u. a. Informationen über die geklickte Zelle übermittelt.
- Die Eigenschaften RowIndex und ColumnIndex liefern den Index von Zeile bzw. Spalte zur weiteren Auswertung.
Abbildung 7.41 Nach Klick auf Zelle
Ihre Meinung
Wie hat Ihnen das Openbook gefallen? Wir freuen uns immer über Ihre Rückmeldung. Schreiben Sie uns gerne Ihr Feedback als E-Mail an kommunikation@rheinwerk-verlag.de.