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.
La gestione degli errori dall'archivio dati sottostante è una funzionalità necessaria per un'applicazione di immissione dati. Il controllo DataGridView di Windows Forms semplifica questo processo esponendo l'evento DataError, che viene generato quando l'archivio dati rileva una violazione del vincolo o una regola aziendale non rispettata.
In questa guida, recupererai le righe dalla tabella Customers
nel database di esempio Northwind e le visualizzerai in un controllo DataGridView. Quando viene rilevato un valore CustomerID
duplicato in una nuova riga o in una riga esistente modificata, si verificherà l'evento DataError, che verrà gestito visualizzando un MessageBox che descrive l'eccezione.
Per copiare il codice in questo argomento come singolo elenco, vedere Come gestire gli errori che si verificano durante l'immissione di dati nel controllo DataGridView di Windows Form.
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 gestire gli errori di immissione dei dati nel controllo 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); }
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) 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 Class
Implementare 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
GetData
che restituisce un oggetto DataTable popolato. Assicurarsi di impostare la variabileconnectionString
su 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, including the // schema information that contains the CustomerID column // constraint. SqlDataAdapter adapter = new SqlDataAdapter(selectCommand, connectionString); DataTable data = new DataTable(); data.Locale = System.Globalization.CultureInfo.InvariantCulture; adapter.Fill(data); adapter.FillSchema(data, SchemaType.Source); 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, including the ' schema information that contains the CustomerID column ' constraint. Dim adapter As New SqlDataAdapter(selectCommand, connectionString) Dim data As New DataTable() data.Locale = System.Globalization.CultureInfo.InvariantCulture adapter.Fill(data) adapter.FillSchema(data, SchemaType.Source) Return data End Function
Implementare 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 the DataError event to the corresponding event handler. this.dataGridView1.DataError += new DataGridViewDataErrorEventHandler(dataGridView1_DataError); // 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 Sub
Gestire l'evento DataError nel DataGridView.
Se il contesto dell'errore è un'operazione di commit, visualizza l'errore in un messaggio di tipo MessageBox.
private void dataGridView1_DataError(object sender, DataGridViewDataErrorEventArgs e) { // If the data source raises an exception when a cell value is // commited, display an error message. if (e.Exception != null && e.Context == DataGridViewDataErrorContexts.Commit) { MessageBox.Show("CustomerID value must be unique."); } }
Private Sub dataGridView1_DataError(ByVal sender As Object, _ ByVal e As DataGridViewDataErrorEventArgs) _ Handles dataGridView1.DataError ' If the data source raises an exception when a cell value is ' commited, display an error message. If e.Exception IsNot Nothing AndAlso _ e.Context = DataGridViewDataErrorContexts.Commit Then MessageBox.Show("CustomerID value must be unique.") End If End Sub
Test dell'applicazione
È ora possibile testare il modulo per assicurarsi che si comporti come previsto.
Per testare il modulo
Premere F5 per eseguire l'applicazione.
Verrà visualizzato un controllo DataGridView compilato con i dati della tabella Customers. Se si immette un valore duplicato per
CustomerID
e si esegue il commit della modifica, il valore della cella verrà ripristinato automaticamente e verrà visualizzato un MessageBox che visualizza l'errore di immissione dei dati.
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.
Validare l'input dell'utente per il controllo DataGridView. Per altre informazioni, vedere Procedura dettagliata: Convalida dei dati nel controllo DataGridView di Windows Forms.
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 gli stili di cella predefiniti per il controllo DataGridView di Windows Form.
Vedere anche
- DataGridView
- BindingSource
- Inserimento dati nel controllo DataGridView di Windows Forms
- Procedura: Gestire gli errori che si verificano durante l'immissione di dati nel controllo DataGridView di Windows Forms
- Guida pratica: Convalida dei dati nel controllo DataGridView di Windows Forms
- Protezione delle informazioni di connessione
.NET Desktop feedback