Exemplarische Vorgehensweise: Erstellen eines ungebundenen DataGridView-Steuerelements in Windows Forms
Möglicherweise möchten Sie häufig tabellarische Daten anzeigen, die nicht aus einer Datenbank stammen. Sie können beispielsweise die Inhalte eines zweidimensionalen Arrays von Zeichenfolgen anzeigen. Die DataGridView-Klasse bietet eine einfache und hochgradig anpassbare Möglichkeit, Daten ohne Bindung an eine Datenquelle anzuzeigen. In dieser exemplarischen Vorgehensweise wird gezeigt, wie Sie ein DataGridView-Steuerelement ausfüllen und das Hinzufügen und Löschen von Zeilen im ungebundenen Modus verwalten. Der Benutzer kann standardmäßig neue Zeilen hinzufügen. Um das Hinzufügen von Zeilen zu verhindern, legen Sie für die AllowUserToAddRows-Eigenschaft false
fest.
Informationen zum Kopieren des Codes in diesem Thema als einzelner Eintrag 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 und
Main
-Methoden enthält.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();
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()] static void Main() { Application.EnableVisualStyles(); Application.Run(new Form1()); } }
<STAThreadAttribute()> _ Public Shared Sub Main() Application.EnableVisualStyles() Application.Run(New Form1()) End Sub End Class
Implementieren Sie eine
SetupLayout
-Methode in der Klassendefinition Ihres Formulars, um das Layout des Formulars einzurichten.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); }
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
Erstellen Sie eine
SetupDataGridView
-Methode zum Einrichten der DataGridView-Spalten und -Eigenschaften.Diese Methode fügt zuerst das DataGridView-Steuerelement zur Controls-Sammlung des Formulars hinzu. Als Nächstes wird die Anzahl der anzuzeigenden Spalten mithilfe der ColumnCount-Eigenschaft festgelegt. Die Standardformatvorlage für die Spaltenüberschriften wird festgelegt, indem Sie die Eigenschaften BackColor, ForeColor und Font des DataGridViewCellStyle-Objekts festlegen, das von der ColumnHeadersDefaultCellStyle-Eigenschaft zurückgegeben wird.
Layout- und Darstellungseigenschaften werden festgelegt, und dann werden die Spaltennamen zugewiesen. Wenn diese Methode beendet wird, ist das DataGridView-Steuerelement bereit, ausgefüllt zu werden.
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); }
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
Erstellen Sie eine
PopulateDataGridView
-Methode zum Hinzufügen von Zeilen zum DataGridView-Steuerelement.Jede Zeile stellt einen Song und seine zugeordneten Informationen dar.
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; }
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
Mit den Hilfsmethoden können Sie Ereignishandler anfügen.
Sie behandeln die Click-Ereignisse der Schaltflächen Hinzufügen und Löschen, das Load-Ereignis des Formulars und das CellFormatting-Ereignis des DataGridView-Steuerelements.
Wenn das Click-Ereignis der Schaltfläche Hinzufügen ausgelöst wird, wird eine neue leere Zeile dem DataGridView-Element 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, die dem Benutzer das Hinzufügen neuer Zeilen ermöglicht. Diese Zeile ist immer die letzte Zeile im DataGridView-Steuerelement.
Wenn das Load-Ereignis des Formulars ausgelöst wird, werden die Hilfsmethoden
SetupLayout
,SetupDataGridView
undPopulateDataGridView
aufgerufen.Wenn das CellFormatting-Ereignis ausgelöst wird, wird jede Zelle in der
Date
-Spalte als langes Datum formatiert, es sei denn, der Wert der Zelle kann nicht analysiert werden.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 (e != null) { if (this.songsDataGridView.Columns[e.ColumnIndex].Name == "Release Date") { 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); } }
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 e IsNot Nothing Then If Me.songsDataGridView.Columns(e.ColumnIndex).Name = _ "Release Date" 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
Testen der Anwendung
Sie können das Formular jetzt testen, um sicherzustellen, dass das Verhalten wie erwartet ausfällt.
So testen Sie das Formular
Drücken Sie F5, um die Anwendung auszuführen.
Sie sehen ein DataGridView-Steuerelement, das die in
PopulateDataGridView
aufgeführten Songs anzeigt. Sie können neue Zeilen mit der Schaltfläche Zeile hinzufügen hinzufügen und ausgewählte Zeilen mit der Schaltfläche Zeile löschen löschen. Das ungebundene DataGridView-Steuerelement ist der Datenspeicher, und seine Daten sind unabhängig von einer externen Quelle, z. B. einem DataSet oder einem Array.
Nächste Schritte
Diese Anwendung vermittelt Ihnen ein grundlegendes Verständnis der Funktionen des DataGridView-Steuerelements. Sie können das Aussehen und Verhalten des DataGridView -Steuerelements auf verschiedene Weise anpassen:
Ändern Sie die Rahmen- und Kopfzeilenformate. Weitere Informationen finden Sie unter Vorgehensweise: Ändern des Rahmen- und Rasterlinienstils im DataGridView-Steuerelement in Windows Forms.
Aktivieren oder beschränken Sie die Benutzereingabe für das DataGridView-Steuerelement. Weitere Informationen finden Sie unter Gewusst wie: Verhindern, dass Zeilen im DataGridView-Steuerelement in Windows Forms hinzugefügt und gelöscht werden und Gewusst wie: Zuweisen von schreibgeschützten Spalten im DataGridView-Steuerelement von Windows Forms.
Überprüfen Sie die 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.
Verarbeiten Sie sehr große Datasets mithilfe des virtuellen Modus. Weitere Informationen finden Sie unter Exemplarische Vorgehensweise: Implementieren des virtuellen Modus im DataGridView-Steuerelement in Windows Forms.
Passen Sie die Darstellung der Zellen an. Weitere Informationen finden Sie unter Vorgehensweise: Anpassen der Darstellung von Zellen im DataGridView-Steuerelement von Windows Forms und Vorgehensweise: Festlegen von Standardzellenformaten für das DataGridView-Steuerelement von Windows Forms.
Weitere Informationen
.NET Desktop feedback
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für