Procedura dettagliata: creazione di un controllo DataGridView Windows Form non associato
Aggiornamento: novembre 2007
Spesso si desidera visualizzare dati in formato tabulare che non hanno origine da un database. Ad esempio, si può desiderare di visualizzare i contenuti di una matrice bidimensionale di stringhe. La classe DataGridView fornisce un metodo semplice e personalizzabile per visualizzare i dati senza associarli a un'origine dati. In questa procedura dettagliata viene illustrato come popolare un controllo DataGridView e gestire l'aggiunta e l'eliminazione di righe in modalità "svincolata". Per impostazione predefinita, l'utente può aggiungere nuove righe. Per impedire l'aggiunta di nuove righe, impostare la proprietà AllowUserToAddRows su false.
Per copiare il codice nell'argomento corrente come un elenco singolo, vedere Procedura: creare un controllo DataGridView di Windows Form non associato.
Creazione del form
Per utilizzare un controllo DataGridView non associato
Creare una classe che derivi dalla classe Form e contenga le dichiarazioni di variabili di classe e il metodo Main riportati di seguito.
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()); } }
Implementare un metodo SetupLayout nella definizione di classe del form per impostare il layout del form.
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); }
Creare un metodo SetupDataGridView per impostare le colonne e le proprietà della classe DataGridView.
Questo metodo aggiunge il controllo DataGridView all'insieme Controls del form. Successivamente, il numero delle colonne da visualizzare viene impostato mediante la proprietà ColumnCount. The default style for the column headers is set by setting the BackColor, ForeColor, and Font properties of the DataGridViewCellStyle returned by the ColumnHeadersDefaultCellStyle property.
Vengono impostate le proprietà del layout e dell'aspetto e vengono assegnati i nomi delle colonne. Quando questo metodo viene chiuso, è possibile popolare il controllo DataGridView.
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); }
Creare un metodo PopulateDataGridView per aggiungere righe al controllo DataGridView.
Ciascuna riga rappresenta una canzone e le informazioni associate.
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; }
Con i metodi di utilità in funzione, è possibile associare gestori eventi.
Verranno gestiti gli eventi Click dei pulsanti Add e Delete, l'evento Load del form e l'evento CellFormatting del controllo DataGridView.
Quando viene generato l'evento Click del pulsante Add, alla classe DataGridView viene aggiunta una nuova riga vuota.
Quando viene generato l'evento Click del pulsante Delete, la riga selezionata viene eliminata, a meno che non sia la riga riservata ai nuovi record, che consente agli utenti di aggiungere nuove righe. Questa riga è sempre l'ultima riga all'interno del controllo DataGridView.
Quando viene generato l'evento Load del form, vengono chiamati i metodi di utilità SetupLayout, SetupDataGridView e PopulateDataGridView.
Quando viene generato l'evento CellFormatting, ciascuna cella della colonna Date viene formattata come data estesa, a meno che non sia possibile analizzare il valore della cella.
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 Me.songsDataGridView.Columns(e.ColumnIndex).Name = _ "Release Date" Then If e IsNot Nothing 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 (this.songsDataGridView.Columns[e.ColumnIndex].Name == "Release Date") { if (e != null) { 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 dell'applicazione
È ora possibile verificare il form per assicurarsi che funzioni correttamente.
Per eseguire il test del form
Premere F5 per eseguire l'applicazione.
Verrà visualizzato un controllo DataGridView che conterrà le canzoni elencate in PopulateDataGridView. Mediante il pulsante Add Row è possibile aggiungere nuove righe, mentre è possibile eliminare le righe selezionate mediante il pulsante Delete Row. Il controllo DataGridView non associato è l'archivio dati e i relativi dati sono indipendenti dalle origini esterne, come nel caso di una classe DataSet o di una matrice.
Passaggi successivi
Questa applicazione fornisce elementi di base per comprendere le capacità del controllo DataGridView. È possibile personalizzare l'aspetto e il comportamento del controllo DataGridView in diversi modi:
Modificando gli stili dei bordi e dell'intestazione. Per ulteriori informazioni, vedere Procedura: modificare gli stili dei bordi e delle linee della griglia nel controllo DataGridView di Windows Form.
Abilitando o limitando l'input dell'utente al controllo DataGridView. Per ulteriori informazioni, vedere Procedura: impedire l'aggiunta o l'eliminazione di righe nel controllo DataGridView di Windows Form e Procedura: impostare le colonne come in sola lettura nel controllo DataGridView di Windows Form.
Verificando l'input dell'utente per rilevare errori collegati al database. Per ulteriori informazioni, vedere Procedura dettagliata: gestione degli errori che si verificano durante l'immissione di dati nel controllo DataGridView Windows Form.
Gestendo serie di dati molto grandi utilizzando la modalità virtuale. Per ulteriori informazioni, vedere Procedura dettagliata: implementazione della modalità virtuale nel controllo DataGridView Windows Form.
Personalizzando l'aspetto delle celle. Per ulteriori informazioni, vedere Procedura: personalizzare l'aspetto delle celle nel controllo DataGridView di Windows Form e Procedura: impostare stili di cella predefiniti per il controllo DataGridView di Windows Form.
Vedere anche
Attività
Procedura: creare un controllo DataGridView di Windows Form non associato
Concetti
Modalità di visualizzazione dati nel controllo DataGridView di Windows Form
Riferimenti
Altre risorse
Visualizzazione di dati nel controllo DataGridView Windows Form