7.8 Steuerelement DataGridView 

Tabelle
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, 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 ein Menü öffnen, das zahlreiche Möglichkeiten bietet, siehe Abbildung 7.36.
Abbildung 7.35 DataGrid, Einstellmenü
Zunächst der Start-Inhalt des Grids, in Abbildung 7.37.
Abbildung 7.36 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, "15.03.1962") dgv.Rows.Add("Schmitz", "Peter", 81343, 3750, "12.04.1958") dgv.Rows.Add("Mertens", "Julia", 2297, 3621.5, "30.12.1959") End Sub [...] End Class
Listing 7.22 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.
Columns
- Die Eigenschaft Columns ist eine Collection vom Typ DataGridViewColumnCollection und beinhaltet Informationen über alle Spalten der Tabelle.
Neue Spalten
- 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.
Rows
- Die Eigenschaft Rows ist eine Collection vom Typ DataGridViewRowCollection und beinhaltet Informationen über alle Zeilen der Tabelle.
Neue Zeilen
- 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.
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.
Button »Info Spalte«
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.23 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.38.
Abbildung 7.37 Button »Info Spalte«
Button »Mittelwert«
In der Prozedur zum Button Mittelwert werden die Inhalte einzelner Zellen ausgewertet, um den Mittelwert zu errechnen (siehe Abbildung 7.39).
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.24 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.
Cells
- 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.38 Button »Mittelwert«
Klick auf Zelle
Eine letzte Prozedur reagiert auf das Ereignis Benutzer klickt auf Tabellenzelle. Dabei kann festgestellt werden, um welche Zelle es sich handelt, siehe Abbildung 7.40.
Public Class Form1 [...] Private Sub dgv_CellClick( ByVal sender As System.Object, ByVal 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.25 Projekt »DataGrid«, Klick auf Zelle
Zur Erläuterung:
Geklickte Zelle
- 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.39 Nach Klick auf Zelle