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

  1. 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
    
  2. 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
    
  3. Utwórz metodę konfigurowania SetupDataGridViewDataGridView 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
    
  4. 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
    
  5. 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 SetupLayoutzdarzenia formularza Load metody , SetupDataGridViewi PopulateDataGridView 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 PopulateDataGridViewpliku . 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:

Zobacz też