Condividi tramite


Procedura dettagliata: gestione degli errori che si verificano durante l'immissione di dati nel controllo DataGridView Windows Form

La gestione degli errori derivanti dall'archivio dati sottostante è una funzionalità necessaria per un'applicazione di immissione dati. Il controllo DataGridView di Windows Form semplifica questa attività esponendo l'evento DataError, che viene generato quando nell'archivio dati viene rilevata una violazione dei vincoli o di una regola business.

In questa procedura dettagliata verranno recuperate righe dalla tabella Customers del database di esempio Northwind. Queste righe verranno visualizzate in un controllo DataGridView. Quando viene rilevato un valore di riga duplicata CustomerID in una nuova riga o in una riga già presente e modificata, viene generato l'evento DataError, la cui gestione è possibile mediante la visualizzazione della classe MessageBox in cui è descritta l'eccezione.

Per copiare il codice nell'argomento corrente come un elenco singolo, vedere Procedura: gestire gli errori che si verificano durante l'immissione di dati nel controllo DataGridView di Windows Form.

Prerequisiti

Per completare questa procedura dettagliata è necessario:

  • Accedere a un server in cui sia presente il database di esempio Northwind SQL Server.

Creazione del form

Per gestire gli errori di immissione dei dati nel controllo DataGridView

  1. Creare una classe derivante dalla classe Form e che contenga un controllo DataGridView e un componente BindingSource.

    L'esempio di codice riportato di seguito fornisce l'inizializzazione di base del form e include un metodo Main.

    Imports System
    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()> _
        Shared Sub Main()
            Application.EnableVisualStyles()
            Application.Run(New Form1())
        End Sub
    
    End Class
    
    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);
        }
    
    
    ...
    
    
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.Run(new Form1());
        }
    
    }
    
  2. Implementare un metodo nella definizione di classe del form per la gestione dei dettagli della connessione al database.

    In questo esempio di codice viene utilizzato un metodo GetData che restituisce un oggetto DataTable popolato. Accertarsi di avere impostato la variabile connectionString su un valore appropriato per il database in uso.

    Nota sulla sicurezzaNota sulla sicurezza

    L'archiviazione delle informazioni riservate, ad esempio la password, nella stringa di connessione può avere implicazioni sulla sicurezza dell'applicazione. L'autenticazione di Windows, detta anche sicurezza integrata, consente di controllare l'accesso a un database in modo più sicuro. Per ulteriori informazioni, vedere Protezione delle informazioni di connessione (ADO.NET).

    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
    
    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;
    }
    
  3. Implementare un gestore per l'evento Load del form in uso per inizializzare le classi DataGridView e BindingSource e impostare l'associazione dati.

    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
    
    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);
    }
    
  4. Gestire l'evento DataError nella classe DataGridView.

    Se il contesto dell'errore è un'operazione di commit, visualizzare l'errore in una classe MessageBox.

    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
    
    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.");
        }
    }
    

Verifica 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 in cui sono presenti i dati della tabella Customers. Se si inserisce un valore duplicato per CustomerID e si esegue il commit della modifica, il valore della cella verrà annullato automaticamente e verrà visualizzata una classe MessageBox in cui è presente l'errore di immissione dati.

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:

Vedere anche

Attività

Procedura: gestire gli errori che si verificano durante l'immissione di dati nel controllo DataGridView di Windows Form

Procedura dettagliata: convalida di dati nel controllo DataGridView Windows Form

Riferimenti

DataGridView

BindingSource

Concetti

Protezione delle informazioni di connessione (ADO.NET)

Altre risorse

Immissione di dati nel controllo DataGridView Windows Form