Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Quando si visualizzano le funzionalità di immissione dei dati agli utenti, è spesso necessario convalidare i dati immessi nel modulo. La classe DataGridView offre un modo pratico per eseguire la convalida prima del commit dei dati nell'archivio dati. È possibile convalidare i dati gestendo l'evento CellValidating, che viene generato dal DataGridView quando si cambia la cella corrente.
In questa guida, recupererai le righe dalla tabella Customers nel database di esempio Northwind e le visualizzerai in un controllo DataGridView. Quando un utente modifica una cella nella colonna CompanyName e tenta di lasciare la cella, il gestore eventi CellValidating esaminerà la nuova stringa del nome della società per assicurarsi che non sia vuota; se il nuovo valore è una stringa vuota, il DataGridView impedirà al cursore dell'utente di uscire dalla cella finché non viene immessa una stringa non vuota.
Per copiare il codice in questo argomento come un elenco unico, consultare Procedura: Convalidare i dati nel controllo DataGridView di Windows Forms.
Prerequisiti
Per completare questa procedura dettagliata, avrai bisogno di:
- Accesso a un server con il database di esempio Northwind SQL Server.
Creazione del modulo
Per convalidare i dati immessi in un oggetto DataGridView
Creare una classe che deriva da Form e contiene un controllo DataGridView e un componente BindingSource.
L'esempio di codice seguente fornisce l'inizializzazione di base e include un metodo
Main.using System; using System.Data; using System.Data.SqlClient; using System.Windows.Forms; public class Form1 : System.Windows.Forms.Form { private DataGridView dataGridView1 = new DataGridView(); private BindingSource bindingSource1 = new BindingSource(); public Form1() { // Initialize the form. this.dataGridView1.Dock = DockStyle.Fill; this.Controls.Add(dataGridView1); this.Load += new EventHandler(Form1_Load); this.Text = "DataGridView validation demo (disallows empty CompanyName)"; }Imports System.Data Imports System.Data.SqlClient Imports System.Windows.Forms Public Class Form1 Inherits System.Windows.Forms.Form Private WithEvents dataGridView1 As New DataGridView() Private bindingSource1 As New BindingSource() Public Sub New() ' Initialize the form. Me.dataGridView1.Dock = DockStyle.Fill Me.Controls.Add(dataGridView1) Me.Text = "DataGridView validation demo (disallows empty CompanyName)" End Sub[STAThread] static void Main() { Application.EnableVisualStyles(); Application.Run(new Form1()); } }<STAThread()> _ Shared Sub Main() Application.EnableVisualStyles() Application.Run(New Form1()) End Sub End ClassImplementare un metodo nella definizione della classe del modulo per gestire i dettagli della connessione al database.
In questo esempio di codice viene utilizzato un metodo
GetDatache restituisce un oggetto DataTable popolato. Assicurarsi di impostare la variabileconnectionStringsu un valore appropriato per il database.Importante
L'archiviazione di informazioni riservate, ad esempio una password, all'interno della stringa di connessione può influire sulla sicurezza dell'applicazione. L'uso dell'autenticazione di Windows, noto anche come sicurezza integrata, è un modo più sicuro per controllare l'accesso a un database. Per altre informazioni, vedere Protezione delle informazioni di connessione.
private static DataTable GetData(string selectCommand) { string connectionString = "Integrated Security=SSPI;Persist Security Info=False;" + "Initial Catalog=Northwind;Data Source=localhost;Packet Size=4096"; // Connect to the database and fill a data table. SqlDataAdapter adapter = new SqlDataAdapter(selectCommand, connectionString); DataTable data = new DataTable(); data.Locale = System.Globalization.CultureInfo.InvariantCulture; adapter.Fill(data); return data; }Private Shared Function GetData(ByVal selectCommand As String) As DataTable Dim connectionString As String = _ "Integrated Security=SSPI;Persist Security Info=False;" + _ "Initial Catalog=Northwind;Data Source=localhost;Packet Size=4096" ' Connect to the database and fill a data table. Dim adapter As New SqlDataAdapter(selectCommand, connectionString) Dim data As New DataTable() data.Locale = System.Globalization.CultureInfo.InvariantCulture adapter.Fill(data) Return data End FunctionImplementare un gestore per l'evento Load del modulo che inizializza DataGridView e BindingSource e configura l'associazione dati.
private void Form1_Load(System.Object sender, System.EventArgs e) { // Attach DataGridView events to the corresponding event handlers. this.dataGridView1.CellValidating += new DataGridViewCellValidatingEventHandler(dataGridView1_CellValidating); this.dataGridView1.CellEndEdit += new DataGridViewCellEventHandler(dataGridView1_CellEndEdit); // Initialize the BindingSource and bind the DataGridView to it. bindingSource1.DataSource = GetData("select * from Customers"); this.dataGridView1.DataSource = bindingSource1; this.dataGridView1.AutoResizeColumns( DataGridViewAutoSizeColumnsMode.AllCellsExceptHeader); }Private Sub Form1_Load(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Me.Load ' Initialize the BindingSource and bind the DataGridView to it. bindingSource1.DataSource = GetData("select * from Customers") Me.dataGridView1.DataSource = bindingSource1 Me.dataGridView1.AutoResizeColumns( _ DataGridViewAutoSizeColumnsMode.AllCellsExceptHeader) End SubImplementare i gestori per gli eventi di DataGridView e CellValidating del controllo CellEndEdit.
Il gestore eventi CellValidating determina se il valore di una cella nella colonna
CompanyNameè vuoto. Se la convalida del valore della cella non riesce, impostare la proprietà Cancel della classe System.Windows.Forms.DataGridViewCellValidatingEventArgs sutrue. In questo modo il controllo DataGridView impedisce al cursore di uscire dalla cella. Impostare la proprietà ErrorText sulla riga su una stringa esplicativa. Verrà visualizzata un'icona di errore con una descrizione comando contenente il testo dell'errore. Nel gestore di eventi CellEndEdit, imposta la proprietà ErrorText della riga alla stringa vuota. L'evento CellEndEdit si verifica solo quando la cella esce dalla modalità di modifica, cosa che non può fare se non riesce la convalida.private void dataGridView1_CellValidating(object sender, DataGridViewCellValidatingEventArgs e) { string headerText = dataGridView1.Columns[e.ColumnIndex].HeaderText; // Abort validation if cell is not in the CompanyName column. if (!headerText.Equals("CompanyName")) return; // Confirm that the cell is not empty. if (string.IsNullOrEmpty(e.FormattedValue.ToString())) { dataGridView1.Rows[e.RowIndex].ErrorText = "Company Name must not be empty"; e.Cancel = true; } } void dataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e) { // Clear the row error in case the user presses ESC. dataGridView1.Rows[e.RowIndex].ErrorText = String.Empty; }Private Sub dataGridView1_CellValidating(ByVal sender As Object, _ ByVal e As DataGridViewCellValidatingEventArgs) _ Handles dataGridView1.CellValidating Dim headerText As String = _ dataGridView1.Columns(e.ColumnIndex).HeaderText ' Abort validation if cell is not in the CompanyName column. If Not headerText.Equals("CompanyName") Then Return ' Confirm that the cell is not empty. If (String.IsNullOrEmpty(e.FormattedValue.ToString())) Then dataGridView1.Rows(e.RowIndex).ErrorText = _ "Company Name must not be empty" e.Cancel = True End If End Sub Private Sub dataGridView1_CellEndEdit(ByVal sender As Object, _ ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) _ Handles dataGridView1.CellEndEdit ' Clear the row error in case the user presses ESC. dataGridView1.Rows(e.RowIndex).ErrorText = String.Empty End Sub
Test dell'applicazione
È ora possibile testare il modulo per assicurarsi che si comporti come previsto.
Per testare il modulo
Compilare ed eseguire l'applicazione.
Verrà visualizzata una DataGridView compilata con i dati della tabella
Customers. Quando si fa doppio clic su una cella nella colonnaCompanyName, è possibile modificare il valore. Se si eliminano tutti i caratteri e si preme il tasto TAB per uscire dalla cella, il DataGridView impedisce di uscire. Quando si digita una stringa non vuota nella cella, il controllo DataGridView consente di uscire dalla cella.
Passaggi successivi
Questa applicazione offre una conoscenza di base delle funzionalità del controllo DataGridView. È possibile personalizzare l'aspetto e il comportamento del controllo DataGridView in diversi modi:
Modificare gli stili di bordo e dell'intestazione. Per ulteriori informazioni, vedere Procedura: Modificare gli stili degli bordi e delle griglie nel controllo DataGridView di Windows Forms.
Abilita o limita l'input dell'utente sul controllo DataGridView. Per altre informazioni, vedere Procedura: Impedire l'aggiunta e l'eliminazione di righe nel controllo DataGridView di Windows Forme Procedura: Impostare colonne Read-Only nel controllo DataGridView di Windows Form.
Controllare l'input dell'utente per individuare gli errori correlati al database. Per altre informazioni, vedere Procedura dettagliata: Gestione degli errori che si verificano durante l'immissione di dati nel controllo DataGridView di Windows Form.
Gestire set di dati molto grandi usando la modalità virtuale. Per ulteriori informazioni, vedere Procedura dettagliata: implementazione della modalità virtuale nel controllo DataGridView di Windows Forms.
Personalizzare l'aspetto delle celle. Per altre informazioni, vedere Procedura: Personalizzare l'aspetto delle celle nel controllo DataGridView di Windows Form e Procedura: Impostare stili di carattere e colori nel controllo DataGridView di Windows Form.
Vedere anche
- DataGridView
- BindingSource
- Inserimento dati nel controllo DataGridView di Windows Forms
- Procedura: Convalidare i dati nel controllo DataGridView di Windows Form
- Procedura dettagliata: Gestione degli errori che si verificano durante l'immissione di dati nel controllo DataGridView di Windows Forms
- Protezione delle informazioni di connessione
.NET Desktop feedback