Procédure pas à pas : création d'un contrôle DataGridView Windows Forms non lié
Il peut vous arriver fréquemment de souhaiter afficher des données sous forme de tableau qui ne proviennent pas d'une base de données. Par exemple, vous pouvez souhaiter afficher le contenu d'un tableau de chaînes à deux dimensions. La classe DataGridView fournit un moyen facile et très personnalisable d'afficher des données sans créer de liaison à une source de données. Cette procédure pas à pas indique comment remplir un contrôle DataGridView et gérer l'ajout et la suppression de lignes en mode "indépendant". Par défaut, l'utilisateur peut ajouter de nouvelles lignes. Pour empêcher l'ajout de ligne, donnez à la propriété AllowUserToAddRows la valeur false.
Pour copier le code dans cette rubrique sous forme de liste unique, consultez Comment : créer un contrôle DataGridView Windows Forms indépendant.
Création du formulaire
Pour utiliser un contrôle DataGridView indépendant
Créez une classe qui dérive de Form et contient les déclarations de variable suivantes et la méthode Main.
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()); } }
Implémentez une méthode SetupLayout dans la définition de classe de votre formulaire pour configurer la disposition du formulaire.
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); }
Créez une méthode SetupDataGridView pour configurer les colonnes et les propriétés de DataGridView.
Cette méthode ajoute d'abord le contrôle DataGridView à la collection Controls du formulaire. Ensuite, le nombre de colonnes à afficher est défini à l'aide de la propriété ColumnCount. Le style par défaut des en-têtes de colonnes est défini à l'aide des propriétés BackColor, ForeColor et Font du DataGridViewCellStyle retourné par la propriété ColumnHeadersDefaultCellStyle.
Les propriétés de disposition et d'apparence sont définies, puis les noms de colonnes sont assignés. Lorsque cette méthode a terminé son exécution, le contrôle DataGridView est prêt à être rempli.
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); }
Créez une méthode PopulateDataGridView pour ajouter des lignes au contrôle DataGridView.
Chaque ligne représente une chanson et les informations qui lui sont associées.
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; }
Avec les méthodes utilitaires en place, vous pouvez joindre des gestionnaires d'événements.
Vous gérerez les événements Click des boutons Ajouter et Supprimer, l'événement Load du formulaire et l'événement CellFormatting du contrôle DataGridView.
Lorsque l'événement Click du bouton Ajouter est déclenché, une nouvelle ligne vide est ajoutée à DataGridView.
Lorsque l'événement Click du bouton Supprimer est déclenché, la ligne sélectionnée est supprimée, sauf s'il s'agit de la ligne prévue pour les nouveaux enregistrements, qui permet à l'utilisateur d'ajouter de nouvelles lignes. Cette ligne est toujours la dernière dans le contrôle DataGridView.
Lorsque l'événement Load du formulaire est déclenché, les méthodes utilitaires SetupLayout, SetupDataGridView et PopulateDataGridView sont appelées.
Lorsque l'événement CellFormatting est déclenché, chaque cellule de la colonne Date est mise en forme comme une longue date, sauf si la valeur de la cellule ne peut pas être analysée.
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
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); } }
Test de l'application
Vous pouvez à présent tester le formulaire afin de vous assurer qu'il se comporte comme prévu.
Pour tester le formulaire
Appuyez sur F5 pour exécuter l'application.
Vous verrez un contrôle DataGridView 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 à l'aide du bouton Supprimer la ligne. Le contrôle DataGridView indépendant est le magasin de données, et ses données sont indépendantes de toute source externe, telle qu'un DataSet ou un tableau.
Étapes suivantes
Cette application vous donne une présentation basique des capacités du contrôle DataGridView. Vous pouvez personnaliser l'apparence et le comportement du contrôle DataGridView de plusieurs manières :
Changez les styles de bordure et d'en-tête. Pour plus d'informations, consultez Comment : modifier les styles de bordures et de quadrillage dans le contrôle DataGridView Windows Forms.
Activez ou restreignez les entrées d'utilisateur au contrôle DataGridView. Pour plus d'informations, consultez Comment : empêcher l'ajout et la suppression de lignes dans le contrôle DataGridView Windows Forms et Comment : définir une colonne en lecture seule dans le contrôle DataGridView Windows Forms.
Recherchez dans les entrées d'utilisateur les erreurs relatives à la base de données. Pour plus d'informations, consultez Procédure pas à pas : gestion des erreurs qui se produisent lors de la saisie de données dans le contrôle DataGridView Windows Forms.
Gérez de très grandes quantités de données à l'aide du mode virtuel. Pour plus d'informations, consultez Procédure pas à pas : implémentation du mode virtuel dans le contrôle DataGridView Windows Forms.
Personnalisez l'apparence des cellules. Pour plus d'informations, consultez Comment : personnaliser l'apparence des cellules du contrôle DataGridView Windows Forms et Comment : définir les styles de cellules par défaut pour le contrôle DataGridView Windows Forms.
Voir aussi
Tâches
Comment : créer un contrôle DataGridView Windows Forms indépendant
Référence
Concepts
Modes d'affichage des données dans le contrôle DataGridView Windows Forms
Autres ressources
Affichage des données dans le contrôle DataGridView Windows Forms