Exemplarische Vorgehensweise: Erstellen eines ungebundenen DataGridView-Steuerelements in Windows Forms
Aktualisiert: November 2007
Möglicherweise möchten Sie häufig Tabellendaten anzeigen, die nicht aus einer Datenbank stammen. Es kann beispielsweise erforderlich sein, den Inhalt eines zweidimensionalen Zeichenfolgenarrays anzuzeigen. Die DataGridView-Klasse bietet ein einfaches, äußerst benutzerfreundliches Verfahren zum Anzeigen von Daten, ohne dass eine Bindung an eine Datenquelle vorgenommen werden muss. In dieser exemplarischen Vorgehensweise wird veranschaulicht, wie Sie ein DataGridView-Steuerelement füllen und das Hinzufügen und Löschen von Zeilen im "Ungebunden"-Modus verwalten. Der Benutzer kann standardmäßig neue Zeilen hinzufügen. Um das Hinzufügen von Zeilen zu unterbinden, legen Sie die AllowUserToAddRows-Eigenschaft auf false fest.
Informationen zum Kopieren des Codes in diesem Thema als einzelne Auflistung finden Sie unter Gewusst wie: Erstellen eines ungebundenen DataGridView-Steuerelements in Windows Forms.
Erstellen des Formulars
So verwenden Sie ein ungebundenes DataGridView-Steuerelement
Erstellen Sie eine Klasse, die von Form abgeleitet wird und die folgenden Variablendeklarationen sowie die Main-Methode enthält.
Imports System Imports System.Drawing Imports System.Windows.Forms Public Class Form1 Inherits System.Windows.Forms.Form Private buttonPanel As New Panel Private WithEvents songsDataGridView As New DataGridView Private WithEvents addNewRowButton As New Button Private WithEvents deleteRowButton As New Button ... <STAThreadAttribute()> _ Public Shared Sub Main() Application.EnableVisualStyles() Application.Run(New Form1()) End Sub End Class
using System; using System.Drawing; using System.Windows.Forms; public class Form1 : System.Windows.Forms.Form { private Panel buttonPanel = new Panel(); private DataGridView songsDataGridView = new DataGridView(); private Button addNewRowButton = new Button(); private Button deleteRowButton = new Button(); ... [STAThreadAttribute()] static void Main() { Application.EnableVisualStyles(); Application.Run(new Form1()); } }
Implementieren Sie eine SetupLayout-Methode in der Klassendefinition des Formulars, um das Formularlayout festzulegen.
Private Sub SetupLayout() Me.Size = New Size(600, 500) With addNewRowButton .Text = "Add Row" .Location = New Point(10, 10) End With With deleteRowButton .Text = "Delete Row" .Location = New Point(100, 10) End With With buttonPanel .Controls.Add(addNewRowButton) .Controls.Add(deleteRowButton) .Height = 50 .Dock = DockStyle.Bottom End With Me.Controls.Add(Me.buttonPanel) End Sub
private void SetupLayout() { this.Size = new Size(600, 500); addNewRowButton.Text = "Add Row"; addNewRowButton.Location = new Point(10, 10); addNewRowButton.Click += new EventHandler(addNewRowButton_Click); deleteRowButton.Text = "Delete Row"; deleteRowButton.Location = new Point(100, 10); deleteRowButton.Click += new EventHandler(deleteRowButton_Click); buttonPanel.Controls.Add(addNewRowButton); buttonPanel.Controls.Add(deleteRowButton); buttonPanel.Height = 50; buttonPanel.Dock = DockStyle.Bottom; this.Controls.Add(this.buttonPanel); }
Erstellen Sie eine SetupDataGridView-Methode, um die Spalten und Eigenschaften von DataGridView festzulegen.
Bei dieser Methode wird zunächst das DataGridView-Steuerelement der Controls-Auflistung des Formulars hinzugefügt. Danach wird die Anzahl der anzuzeigenden Spalten mit der ColumnCount-Eigenschaft festgelegt. Der Standardstil für Spaltenheader wird durch Festlegen der Eigenschaften BackColor, ForeColor und Font des DataGridViewCellStyle festgelegt, der von der ColumnHeadersDefaultCellStyle-Eigenschaft zurückgegeben wird.
Eigenschaften für Layout und Darstellung werden festgelegt und anschließend Spaltennamen zugewiesen. Nach Beendigung dieser Methode kann das DataGridView-Steuerelement gefüllt werden.
Private Sub SetupDataGridView() Me.Controls.Add(songsDataGridView) songsDataGridView.ColumnCount = 5 With songsDataGridView.ColumnHeadersDefaultCellStyle .BackColor = Color.Navy .ForeColor = Color.White .Font = New Font(songsDataGridView.Font, FontStyle.Bold) End With With songsDataGridView .Name = "songsDataGridView" .Location = New Point(8, 8) .Size = New Size(500, 250) .AutoSizeRowsMode = _ DataGridViewAutoSizeRowsMode.DisplayedCellsExceptHeaders .ColumnHeadersBorderStyle = DataGridViewHeaderBorderStyle.Single .CellBorderStyle = DataGridViewCellBorderStyle.Single .GridColor = Color.Black .RowHeadersVisible = False .Columns(0).Name = "Release Date" .Columns(1).Name = "Track" .Columns(2).Name = "Title" .Columns(3).Name = "Artist" .Columns(4).Name = "Album" .Columns(4).DefaultCellStyle.Font = _ New Font(Me.songsDataGridView.DefaultCellStyle.Font, FontStyle.Italic) .SelectionMode = DataGridViewSelectionMode.FullRowSelect .MultiSelect = False .Dock = DockStyle.Fill End With End Sub
private void SetupDataGridView() { this.Controls.Add(songsDataGridView); songsDataGridView.ColumnCount = 5; songsDataGridView.ColumnHeadersDefaultCellStyle.BackColor = Color.Navy; songsDataGridView.ColumnHeadersDefaultCellStyle.ForeColor = Color.White; songsDataGridView.ColumnHeadersDefaultCellStyle.Font = new Font(songsDataGridView.Font, FontStyle.Bold); songsDataGridView.Name = "songsDataGridView"; songsDataGridView.Location = new Point(8, 8); songsDataGridView.Size = new Size(500, 250); songsDataGridView.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.DisplayedCellsExceptHeaders; songsDataGridView.ColumnHeadersBorderStyle = DataGridViewHeaderBorderStyle.Single; songsDataGridView.CellBorderStyle = DataGridViewCellBorderStyle.Single; songsDataGridView.GridColor = Color.Black; songsDataGridView.RowHeadersVisible = false; songsDataGridView.Columns[0].Name = "Release Date"; songsDataGridView.Columns[1].Name = "Track"; songsDataGridView.Columns[2].Name = "Title"; songsDataGridView.Columns[3].Name = "Artist"; songsDataGridView.Columns[4].Name = "Album"; songsDataGridView.Columns[4].DefaultCellStyle.Font = new Font(songsDataGridView.DefaultCellStyle.Font, FontStyle.Italic); songsDataGridView.SelectionMode = DataGridViewSelectionMode.FullRowSelect; songsDataGridView.MultiSelect = false; songsDataGridView.Dock = DockStyle.Fill; songsDataGridView.CellFormatting += new DataGridViewCellFormattingEventHandler( songsDataGridView_CellFormatting); }
Erstellen Sie eine PopulateDataGridView-Methode, um dem DataGridView-Steuerelement Zeilen hinzuzufügen.
Jede Zeile stellt ein Lied und zugeordnete Informationen dar.
Private Sub PopulateDataGridView() Dim row0 As String() = {"11/22/1968", "29", "Revolution 9", _ "Beatles", "The Beatles [White Album]"} Dim row1 As String() = {"1960", "6", "Fools Rush In", _ "Frank Sinatra", "Nice 'N' Easy"} Dim row2 As String() = {"11/11/1971", "1", "One of These Days", _ "Pink Floyd", "Meddle"} Dim row3 As String() = {"1988", "7", "Where Is My Mind?", _ "Pixies", "Surfer Rosa"} Dim row4 As String() = {"5/1981", "9", "Can't Find My Mind", _ "Cramps", "Psychedelic Jungle"} Dim row5 As String() = {"6/10/2003", "13", _ "Scatterbrain. (As Dead As Leaves.)", _ "Radiohead", "Hail to the Thief"} Dim row6 As String() = {"6/30/1992", "3", "Dress", "P J Harvey", "Dry"} With Me.songsDataGridView.Rows .Add(row0) .Add(row1) .Add(row2) .Add(row3) .Add(row4) .Add(row5) .Add(row6) End With With Me.songsDataGridView .Columns(0).DisplayIndex = 3 .Columns(1).DisplayIndex = 4 .Columns(2).DisplayIndex = 0 .Columns(3).DisplayIndex = 1 .Columns(4).DisplayIndex = 2 End With End Sub
private void PopulateDataGridView() { string[] row0 = { "11/22/1968", "29", "Revolution 9", "Beatles", "The Beatles [White Album]" }; string[] row1 = { "1960", "6", "Fools Rush In", "Frank Sinatra", "Nice 'N' Easy" }; string[] row2 = { "11/11/1971", "1", "One of These Days", "Pink Floyd", "Meddle" }; string[] row3 = { "1988", "7", "Where Is My Mind?", "Pixies", "Surfer Rosa" }; string[] row4 = { "5/1981", "9", "Can't Find My Mind", "Cramps", "Psychedelic Jungle" }; string[] row5 = { "6/10/2003", "13", "Scatterbrain. (As Dead As Leaves.)", "Radiohead", "Hail to the Thief" }; string[] row6 = { "6/30/1992", "3", "Dress", "P J Harvey", "Dry" }; songsDataGridView.Rows.Add(row0); songsDataGridView.Rows.Add(row1); songsDataGridView.Rows.Add(row2); songsDataGridView.Rows.Add(row3); songsDataGridView.Rows.Add(row4); songsDataGridView.Rows.Add(row5); songsDataGridView.Rows.Add(row6); songsDataGridView.Columns[0].DisplayIndex = 3; songsDataGridView.Columns[1].DisplayIndex = 4; songsDataGridView.Columns[2].DisplayIndex = 0; songsDataGridView.Columns[3].DisplayIndex = 1; songsDataGridView.Columns[4].DisplayIndex = 2; }
Mit den geeigneten Dienstprogrammmethoden können Sie Ereignishandler anfügen.
Sie behandeln die zu den Schaltflächen Hinzufügen und Löschen gehörigen Click-Ereignisse, das Load-Ereignis des Formulars sowie das zum DataGridView-Steuerelement gehörige CellFormatting-Ereignis.
Wenn das Click-Ereignis der Schaltfläche Hinzufügen ausgelöst wird, wird DataGridView eine neue, leere Zeile hinzugefügt.
Wenn das Click-Ereignis der Schaltfläche Löschen ausgelöst wird, wird die ausgewählte Zeile gelöscht, sofern es sich nicht um die Zeile für neue Datensätze handelt, durch die Benutzer neue Zeilen hinzufügen können. Diese Zeile ist immer die letzte Zeile im DataGridView-Steuerelement.
Wenn das Load-Ereignis des Formulars ausgelöst wird, werden die Dienstprogrammmethoden SetupLayout, SetupDataGridView und PopulateDataGridView aufgerufen.
Wenn das CellFormatting-Ereignis ausgelöst wird, werden alle Zellen in der Spalte Date als langes Datum formatiert, es sei denn, der Zellwert kann nicht analysiert werden.
Private Sub Form1_Load(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles MyBase.Load SetupLayout() SetupDataGridView() PopulateDataGridView() End Sub Private Sub songsDataGridView_CellFormatting(ByVal sender As Object, _ ByVal e As System.Windows.Forms.DataGridViewCellFormattingEventArgs) _ Handles songsDataGridView.CellFormatting If Me.songsDataGridView.Columns(e.ColumnIndex).Name = _ "Release Date" Then If e IsNot Nothing Then If e.Value IsNot Nothing Then Try e.Value = DateTime.Parse(e.Value.ToString()) _ .ToLongDateString() e.FormattingApplied = True Catch ex As FormatException Console.WriteLine("{0} is not a valid date.", e.Value.ToString()) End Try End If End If End If End Sub Private Sub addNewRowButton_Click(ByVal sender As Object, _ ByVal e As EventArgs) Handles addNewRowButton.Click Me.songsDataGridView.Rows.Add() End Sub Private Sub deleteRowButton_Click(ByVal sender As Object, _ ByVal e As EventArgs) Handles deleteRowButton.Click If Me.songsDataGridView.SelectedRows.Count > 0 AndAlso _ Not Me.songsDataGridView.SelectedRows(0).Index = _ Me.songsDataGridView.Rows.Count - 1 Then Me.songsDataGridView.Rows.RemoveAt( _ Me.songsDataGridView.SelectedRows(0).Index) End If End Sub
public Form1() { this.Load += new EventHandler(Form1_Load); } private void Form1_Load(System.Object sender, System.EventArgs e) { SetupLayout(); SetupDataGridView(); PopulateDataGridView(); } private void songsDataGridView_CellFormatting(object sender, System.Windows.Forms.DataGridViewCellFormattingEventArgs e) { if (this.songsDataGridView.Columns[e.ColumnIndex].Name == "Release Date") { if (e != null) { if (e.Value != null) { try { e.Value = DateTime.Parse(e.Value.ToString()) .ToLongDateString(); e.FormattingApplied = true; } catch (FormatException) { Console.WriteLine("{0} is not a valid date.", e.Value.ToString()); } } } } } private void addNewRowButton_Click(object sender, EventArgs e) { this.songsDataGridView.Rows.Add(); } private void deleteRowButton_Click(object sender, EventArgs e) { if (this.songsDataGridView.SelectedRows.Count > 0 && this.songsDataGridView.SelectedRows[0].Index != this.songsDataGridView.Rows.Count - 1) { this.songsDataGridView.Rows.RemoveAt( this.songsDataGridView.SelectedRows[0].Index); } }
Testen der Anwendung
Sie können das Formular jetzt testen und prüfen, ob es sich wie erwartet verhält.
So testen Sie das Formular
Drücken Sie F5, um die Anwendung auszuführen.
Sie sehen ein DataGridView-Steuerelement, in dem die in PopulateDataGridView aufgelisteten Lieder angezeigt werden. Sie können neue Zeilen mit der Schaltfläche Add Row hinzufügen und ausgewählte Zeilen mit der Schaltfläche Delete Row löschen. Das ungebundene DataGridView-Steuerelement stellt den Datenspeicher dar. Die darin enthaltenen Daten sind von keiner externen Quelle abhängig, beispielsweise von DataSet oder von einem Array.
Nächste Schritte
Anhand dieser Anwendung erhalten Sie einen grundlegenden Einblick in die Fähigkeiten des DataGridView-Steuerelements. Sie können die Darstellung und das Verhalten des DataGridView-Steuerelements auf vielfältige Weise anpassen:
Ändern von Rahmenart und Headerstil. Weitere Informationen finden Sie unter Gewusst wie: Ändern des Rahmen- und Rasterlinienstils im DataGridView-Steuerelement in Windows Forms.
Aktivieren oder Beschränken von Benutzereingaben im DataGridView-Steuerelement. Weitere Informationen finden Sie unter Gewusst wie: Verhindern, das Zeilen im DataGridView-Steuerelement in Windows Forms hinzugefügt und gelöscht werden und Gewusst wie: Zuweisen von schreibgeschützten Spalten im DataGridView-Steuerelement in Windows Forms.
Überprüfen der Benutzereingabe auf datenbankbezogene Fehler. Weitere Informationen finden Sie unter Exemplarische Vorgehensweise: Behandeln von Fehlern, die während der Dateneingabe im DataGridView-Steuerelement in Windows Forms auftreten.
Behandeln sehr umfangreicher Datasets mithilfe des virtuellen Modus. Weitere Informationen finden Sie unter Exemplarische Vorgehensweise: Implementieren des virtuellen Modus im DataGridView-Steuerelement in Windows Forms.
Anpassen der Darstellung von Zellen. Weitere Informationen finden Sie unter Gewusst wie: Anpassen der Darstellung von Zellen im DataGridView-Steuerelement von Windows Forms und Gewusst wie: Festlegen von Standardzellenformaten für das DataGridView-Steuerelement in Windows Forms.
Siehe auch
Aufgaben
Gewusst wie: Erstellen eines ungebundenen DataGridView-Steuerelements in Windows Forms
Konzepte
Datenanzeigemodi im DataGridView-Steuerelement in Windows Forms
Referenz
Weitere Ressourcen
Anzeigen von Daten im DataGridView-Steuerelement in Windows Forms