Procédure pas à pas : création d'un contrôle DataGridView Windows Forms non lié

Vous pouvez souvent afficher des données tabulaires qui ne proviennent pas d’une base de données. Par exemple, vous pouvez afficher le contenu d’un tableau à deux dimensions de chaînes. La DataGridView classe offre un moyen facile et hautement personnalisable d’afficher des données sans liaison à une source de données. Cette procédure pas à pas montre comment remplir un DataGridView contrôle et gérer l’ajout et la suppression de lignes en mode « non lié ». Par défaut, l’utilisateur peut ajouter de nouvelles lignes. Pour empêcher l’ajout de lignes, définissez la AllowUserToAddRows propriété .false

Pour copier le code de cette rubrique sous la forme d’une liste unique, consultez Guide pratique pour créer un contrôle DataGridView Windows Forms indépendant.

Création du formulaire

Pour utiliser un contrôle DataGridView indépendant

  1. Créez une classe qui dérive Form et contient les déclarations et Main méthodes de variables suivantes.

    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. Implémentez une SetupLayout méthode dans la définition de classe de votre formulaire pour configurer la disposition du formulaire.

    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. Créez une SetupDataGridView méthode pour configurer les DataGridView colonnes et les propriétés.

    Cette méthode ajoute d’abord le DataGridView contrôle à la collection du Controls formulaire. Ensuite, le nombre de colonnes à afficher est défini à l’aide de la ColumnCount propriété. Le style par défaut pour les en-têtes de colonne est défini en définissant les BackColorpropriétés , ForeColoret Font les DataGridViewCellStyle propriétés du retour par la ColumnHeadersDefaultCellStyle propriété.

    Les propriétés de disposition et d’apparence sont définies, puis les noms de colonnes sont attribués. Lorsque cette méthode se termine, le DataGridView contrôle est prêt à être rempli.

    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. Créez une PopulateDataGridView méthode pour ajouter des lignes au DataGridView contrôle.

    Chaque ligne représente une chanson et ses informations associées.

    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. Avec les méthodes utilitaires en place, vous pouvez attacher des gestionnaires d’événements.

    Vous allez gérer les événements des Click boutons Ajouter et supprimer, l’événement du Load formulaire et l’événement DataGridView du CellFormatting contrôle.

    Lorsque l’événement du Click bouton Ajouter est déclenché, une nouvelle ligne vide est ajoutée à l’élément DataGridView.

    Lorsque l’événement du Click bouton Supprimer est déclenché, la ligne sélectionnée est supprimée, sauf s’il s’agit de la ligne des nouveaux enregistrements, ce qui permet à l’utilisateur d’ajouter de nouvelles lignes. Cette ligne est toujours la dernière ligne du DataGridView contrôle.

    Lorsque l’événement du Load formulaire est déclenché, les SetupLayoutméthodes , SetupDataGridViewet PopulateDataGridView utilitaire sont appelées.

    Lorsque l’événement CellFormatting est déclenché, chaque cellule de la Date colonne est mise en forme comme une date longue, sauf si la valeur de la cellule ne peut pas être analysée.

    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
    

Test de l’application

Vous pouvez maintenant tester le formulaire pour vous assurer qu’il se comporte comme prévu.

Pour tester le formulaire

  • Appuyez sur F5 pour exécuter l'application.

    Vous verrez un DataGridView contrôle qui affiche les chansons répertoriées dans PopulateDataGridView. Vous pouvez ajouter de nouvelles lignes avec le bouton Ajouter une ligne et supprimer les lignes sélectionnées avec le bouton Supprimer la ligne . Le contrôle indépendant DataGridView est le magasin de données, et ses données sont indépendantes de n’importe quelle source externe, telle qu’un DataSet ou un tableau.

Étapes suivantes

Cette application vous donne une compréhension de base des DataGridView fonctionnalités du contrôle. Vous pouvez personnaliser l’apparence et le comportement du DataGridView contrôle de plusieurs façons :

Voir aussi