Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Het verwerken van fouten uit het onderliggende gegevensarchief is een vereiste functie voor een toepassing voor gegevensinvoer. Het Windows Forms DataGridView-besturingselement maakt dit eenvoudig door de DataError-gebeurtenis bloot te leggen, die wordt gegenereerd wanneer een beperkingsinbreuk of een verbroken bedrijfsregel in de datastore wordt gedetecteerd.
In deze handleiding haalt u rijen op uit de tabel Customers in de voorbeelddatabase Northwind en geeft u deze weer in een controle-element DataGridView. Wanneer een dubbele CustomerID waarde wordt gedetecteerd in een nieuwe rij of een bewerkte bestaande rij, vindt de DataError gebeurtenis plaats, die wordt verwerkt door een MessageBox weer te geven waarin de uitzondering wordt beschreven.
Als u de code in dit onderwerp als één enkele lijst wilt kopiëren, zie Hoe: Fouten afhandelen die optreden tijdens het invoeren van gegevens in het besturingselement Windows Forms DataGridView.
Vereiste voorwaarden
Als u deze procedure wilt voltooien, hebt u het volgende nodig:
- Toegang tot een server met de voorbeelddatabase Northwind SQL Server.
Het formulier maken
Gegevensinvoerfouten afhandelen in het DataGridView-besturingselement
Maak een klasse die is afgeleid van Form en bevat een DataGridView besturingselement en een BindingSource-onderdeel.
Het volgende codevoorbeeld biedt eenvoudige initialisatie en bevat een
Mainmethode.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 ClassImplementeer een methode in de klassedefinitie van uw formulier voor het verwerken van de details van het maken van verbinding met de database.
In dit codevoorbeeld wordt een
GetDatamethode gebruikt waarmee een ingevuld DataTable-object wordt geretourneerd. Zorg ervoor dat u deconnectionStringvariabele instelt op een waarde die geschikt is voor uw database.Belangrijk
Het opslaan van gevoelige informatie, zoals een wachtwoord, binnen de verbindingsreeks kan van invloed zijn op de beveiliging van uw toepassing. Het gebruik van Windows-verificatie (ook wel geïntegreerde beveiliging genoemd) is een veiligere manier om de toegang tot een database te beheren. Zie Verbindingsinformatie beveiligenvoor meer informatie.
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 FunctionImplementeer een handler voor de Load gebeurtenis van uw formulier waarmee de DataGridView en BindingSource worden geïnitialiseerd en de gegevensbinding wordt ingesteld.
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 SubBehandel de DataError-gebeurtenis op de DataGridView.
Als de context voor de fout een doorvoeringsbewerking is, geeft u de fout weer in een 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
De toepassing testen
U kunt het formulier nu testen om ervoor te zorgen dat het zich gedraagt zoals verwacht.
Om het formulier te testen
Druk op F5 om de toepassing uit te voeren.
U ziet een DataGridView besturingselement dat is gevuld met gegevens uit de tabel Klanten. Als u een dubbele waarde invoert voor
CustomerIDen de bewerking doorvoert, wordt de celwaarde automatisch teruggezet en ziet u een MessageBox waarin de fout bij het invoeren van gegevens wordt weergegeven.
Volgende stappen
Deze toepassing biedt u een basiskennis van de mogelijkheden van het DataGridView besturingselement. U kunt het uiterlijk en gedrag van het besturingselement DataGridView op verschillende manieren aanpassen:
Rand- en koptekststijlen wijzigen. Zie Hoe de rand- en rasterlijnstijlen te wijzigen in het Windows Forms DataGridView-besturingselementvoor meer informatie.
Gebruikersinvoer inschakelen of beperken voor het DataGridView controle-element. Zie Hoe te: Het voorkomen van het toevoegen en verwijderen van rijen in het Besturingselement Windows Forms DataGridViewen Hoe te: Kolommen Read-Only maken in het Besturingselement Windows Forms DataGridView.
Valideer gebruikersinvoer voor het besturingselement DataGridView. Voor meer informatie, zie Walkthrough: Gegevens valideren in het Windows Forms DataGridView-besturingselement.
Zeer grote gegevenssets verwerken met behulp van de virtuele modus. Zie Walkthrough: De virtuele modus implementeren in het Besturingselement Windows Forms DataGridViewvoor meer informatie.
Het uiterlijk van cellen aanpassen. Zie Instructies: Het uiterlijk van cellen aanpassen in het Windows Forms DataGridView-besturingselement en Instructies: Standaardcelstijlen instellen voor het Windows Forms DataGridView-besturingselement.
Zie ook
.NET Desktop feedback