Exemplarische Vorgehensweise: Behandeln von Fehlern, die während der Dateneingabe im DataGridView-Steuerelement in Windows Forms auftreten

Das Behandeln von Fehlern, die vom zugrunde liegenden Datenspeicher gemeldet werden, ist für ein Datenerfassungsprogramm unverzichtbar. Das DataGridView-Steuerelement in Windows Forms unterstützt diesen Aspekt mithilfe des DataError-Ereignisses, das ausgelöst wird, wenn vom Datenspeicher die Verletzung einer Einschränkung oder Geschäftsregel festgestellt wird.

In dieser exemplarischen Vorgehensweise rufen Sie Zeilen aus der Tabelle Customers in der Beispieldatenbank Northwind ab und zeigen diese in einem DataGridView-Steuerelement an. Wenn in einer neuen oder bearbeiteten vorhandenen Zeile ein doppelter Wert CustomerID gefunden wird, tritt das DataError-Ereignis auf. Das Ereignis wird durch die Anzeige von MessageBox behandelt, in dem die Ausnahme beschrieben wird.

Informationen zum Kopieren des in diesem Thema enthaltenen Codes als einzelne Auflistung finden Sie unter Gewusst wie: Behandeln von Fehlern, die während der Dateneingabe im DataGridView-Steuerelement in Windows Forms auftreten.

Vorbereitungsmaßnahmen

Für die Durchführung dieser exemplarischen Vorgehensweise benötigen Sie Folgendes:

  • Zugriff auf einen Server mit der SQL Server-Beispieldatenbank Northwind.

Erstellen des Formulars

So behandeln Sie Dateneingabefehler im DataGridView-Steuerelement

  1. Erstellen Sie eine Klasse, die von Form abgeleitet ist, und ein DataGridView-Steuerelement sowie eine BindingSource-Komponente enthält.

    Im folgenden Codebeispiel werden grundlegende Initialisierungsfeatures und eine Main-Methode dargestellt.

    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. Implementieren Sie in der Klassendefinition des Formulars eine Methode zum Behandeln der Verbindungsdetails für die Datenbank.

    In diesem Codebeispiel wird eine GetData -Methode verwendet, die ein gefülltes DataTable-Objekt zurückgibt. Die connectionString-Variable muss auf einen Wert festgelegt werden, der für Ihre Datenbank geeignet ist.

    SicherheitshinweisSicherheitshinweis

    Das Speichern vertraulicher Informationen, beispielsweise Kennwörter, innerhalb der Verbindungszeichenfolge kann die Sicherheit einer Anwendung beeinträchtigen. Sicherer lässt sich der Zugriff auf eine Datenbank mithilfe der Windows-Authentifizierung (wird auch als integrierte Sicherheit bezeichnet) steuern. Weitere Informationen finden Sie unter Schützen von Verbindungsinformationen (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. Implementieren Sie einen Handler für das Load-Ereignis des Formulars, durch das DataGridView und BindingSource initialisiert und die Datenbindung eingerichtet werden.

    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. Behandeln Sie das DataError-Ereignis in DataGridView.

    Wenn der Kontext für den Fehler einem Commitvorgang entspricht, zeigen Sie den Fehler in MessageBox an.

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

Testen der Anwendung

Sie können das Formular jetzt testen und prüfen, ob es sich wie erwartet verhält.

So testen Sie das Formular

  • Drücken Sie F5, um die Anwendung auszuführen.

    Es wird ein DataGridView-Steuerelement angezeigt, das mit Daten aus der Tabelle Customers gefüllt ist. Wenn Sie für CustomerID einen doppelten Wert eingeben und ein Commit für den Bearbeitungsvorgang ausführen, wird der Zellwert automatisch wieder zurückversetzt und MessageBox mit dem Dateneingabefehler angezeigt.

Nächste Schritte

Anhand dieser Anwendung erhalten Sie einen grundlegenden Einblick in die Fähigkeiten des DataGridView-Steuerelements. Sie können die Darstellung und das Verhalten des DataGridView-Steuerelements auf vielfältige Weisen anpassen:

Siehe auch

Aufgaben

Gewusst wie: Behandeln von Fehlern, die während der Dateneingabe im DataGridView-Steuerelement in Windows Forms auftreten

Exemplarische Vorgehensweise: Validieren von Daten im DataGridView-Steuerelement in Windows Forms

Referenz

DataGridView

BindingSource

Konzepte

Schützen von Verbindungsinformationen (ADO.NET)

Weitere Ressourcen

Dateneingabe im DataGridView-Steuerelement in Windows Forms