Wskazówki: utworzenie niezwiązanego formantu DataGridView formularzy systemu Windows
Często można wyświetlać dane tabelaryczne, które nie pochodzą z bazy danych. Na przykład możesz wyświetlić zawartość dwuwymiarowej tablicy ciągów. Klasa DataGridView zapewnia łatwy i wysoce dostosowywalny sposób wyświetlania danych bez powiązania ze źródłem danych. W tym przewodniku pokazano, jak wypełnić kontrolkę i zarządzać dodawaniem DataGridView i usuwaniem wierszy w trybie "bez ruchu przychodzącego". Domyślnie użytkownik może dodawać nowe wiersze. Aby zapobiec dodawaniu AllowUserToAddRows wierszy, ustaw właściwość .false
Aby skopiować kod w tym temacie jako pojedynczą listę, zobacz How to: Create an Unbound Windows Forms DataGridView Control (Instrukcje: tworzenie niezwiązanej kontrolki DataGridView formularzy systemu Windows).
Tworzenie formularza
Aby użyć niezwiązanego formantu DataGridView
Utwórz klasę, która pochodzi z Form klasy i zawiera następujące deklaracje zmiennych i
Main
metodę.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
Zaimplementuj metodę
SetupLayout
w definicji klasy formularza, aby skonfigurować układ formularza.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
Utwórz metodę konfigurowania
SetupDataGridView
DataGridView kolumn i właściwości.Ta metoda najpierw dodaje kontrolkę DataGridView do kolekcji Controls formularza. Następnie liczba wyświetlanych kolumn jest ustawiana przy użyciu ColumnCount właściwości . Domyślny styl nagłówków kolumn jest ustawiany przez ustawienie BackColorwłaściwości DataGridViewCellStyle , ForeColori Font zwróconych przez ColumnHeadersDefaultCellStyle właściwość .
Właściwości układu i wyglądu są ustawiane, a następnie przypisywane są nazwy kolumn. Gdy ta metoda zakończy działanie, kontrolka DataGridView jest gotowa do wypełnienia.
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
Utwórz metodę dodawania
PopulateDataGridView
wierszy do kontrolki DataGridView .Każdy wiersz reprezentuje piosenkę i skojarzone z nią informacje.
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
Dzięki metodom narzędzi można dołączać programy obsługi zdarzeń.
Będziesz obsługiwać zdarzenia przycisków Click Dodaj i Usuń, zdarzenie formularza Load i DataGridView zdarzenie kontrolkiCellFormatting.
Po podniesieniu zdarzenia przycisku Click Dodaj do obiektu DataGridViewzostanie dodany nowy pusty wiersz.
Po wystąpieniu zdarzenia przycisku Click Usuń wybrany wiersz zostanie usunięty, chyba że jest to wiersz dla nowych rekordów, który umożliwia użytkownikowi dodawanie nowych wierszy. Ten wiersz jest zawsze ostatnim wierszem w kontrolce DataGridView .
Po wywołaniu
SetupLayout
zdarzenia formularza Load metody ,SetupDataGridView
iPopulateDataGridView
narzędzia.Po wystąpieniu CellFormatting zdarzenia każda komórka w
Date
kolumnie jest sformatowana jako długa data, chyba że nie można przeanalizować wartości komórki.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
Testowanie aplikacji
Teraz możesz przetestować formularz, aby upewnić się, że działa zgodnie z oczekiwaniami.
Aby przetestować formularz
Naciśnij klawisz F5, aby uruchomić aplikację.
Zostanie wyświetlona kontrolka DataGridView wyświetlającą utwory wymienione w
PopulateDataGridView
pliku . Możesz dodać nowe wiersze za pomocą przycisku Dodaj wiersz i usunąć wybrane wiersze za pomocą przycisku Usuń wiersz . Kontrolka bez ruchu DataGridView jest magazynem danych, a jego dane są niezależne od dowolnego źródła zewnętrznego, takiego jak DataSet tablica lub .
Następne kroki
Ta aplikacja zapewnia podstawową wiedzę na temat DataGridView możliwości kontrolki. Wygląd i zachowanie kontrolki DataGridView można dostosować na kilka sposobów:
Zmień style obramowania i nagłówka. Aby uzyskać więcej informacji, zobacz How to: Change the Border and Gridline Styles in the Windows Forms DataGridView Control (Instrukcje: zmienianie stylów obramowania i linii siatki w kontrolce DataGridView formularzy systemu Windows).
Włącz lub ogranicz dane wejściowe użytkownika do kontrolki DataGridView . Aby uzyskać więcej informacji, zobacz Instrukcje: zapobieganie dodawaniu i usuwaniu wierszy w kontrolce DataGridView formularzy systemu Windows oraz Instrukcje: ustawianie kolumn tylko do odczytu w kontrolce DataGridView formularzy systemu Windows.
Sprawdź dane wejściowe użytkownika pod kątem błędów związanych z bazą danych. Aby uzyskać więcej informacji, zobacz Przewodnik: obsługa błędów występujących podczas wprowadzania danych w kontrolce DataGridView formularzy systemu Windows.
Obsługa bardzo dużych zestawów danych przy użyciu trybu wirtualnego. Aby uzyskać więcej informacji, zobacz Przewodnik: implementowanie trybu wirtualnego w kontrolce DataGridView formularzy systemu Windows.
Dostosuj wygląd komórek. Aby uzyskać więcej informacji, zobacz How to: Customize the Appearance of Cells in the Windows Forms DataGridView Control ( Instrukcje: ustawianie domyślnych stylów komórek dla kontrolki DataGridView formularzy systemu Windows).
Zobacz też
.NET Desktop feedback
Opinia
https://aka.ms/ContentUserFeedback.
Dostępne już wkrótce: W 2024 r. będziemy stopniowo wycofywać zgłoszenia z serwisu GitHub jako mechanizm przesyłania opinii na temat zawartości i zastępować go nowym systemem opinii. Aby uzyskać więcej informacji, sprawdź:Prześlij i wyświetl opinię dla