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.
Wanneer u functionaliteit voor gegevensinvoer weergeeft aan gebruikers, moet u vaak de gegevens valideren die in uw formulier zijn ingevoerd. De DataGridView-klasse biedt een handige manier om validatie uit te voeren voordat gegevens worden doorgevoerd in het gegevensarchief. U kunt gegevens valideren door de CellValidating gebeurtenis te verwerken, die wordt gegenereerd door de DataGridView wanneer de huidige cel verandert.
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 gebruiker een cel in de kolom CompanyName bewerkt en de cel probeert te verlaten, onderzoekt de CellValidating gebeurtenis-handler de nieuwe bedrijfsnaamtekenreeks om er zeker van te zijn dat deze niet leeg is; als de nieuwe waarde een lege tekenreeks is, voorkomt de DataGridView dat de cursor van de gebruiker de cel verlaat totdat een niet-lege tekenreeks wordt ingevoerd.
Zie Hoe te doen: Gegevens valideren in het Windows Forms DataGridView-besturingselementom de code in dit onderwerp als één lijst te kopiëren.
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
Gegevens valideren die zijn ingevoerd in een DataGridView
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); 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 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. 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 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 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 SubImplementeer handlers voor de DataGridView- en CellValidating-gebeurtenissen van het CellEndEdit besturingselement.
In de CellValidating gebeurtenis-handler bepaalt u of de waarde van een cel in de kolom
CompanyNameleeg is. Als de celwaarde de validatie niet doorstaat, stel dan de eigenschap Cancel van de klasse System.Windows.Forms.DataGridViewCellValidatingEventArgs in optrue. Hierdoor voorkomt het DataGridView-besturingselement dat de cursor de cel verlaat. Stel de eigenschap ErrorText in de rij in op een verklarende tekenreeks. Hiermee wordt een foutpictogram weergegeven met een knopinfo die de fouttekst bevat. Stel in de CellEndEdit event handler de eigenschap ErrorText van de rij in op de lege tekenreeks. De gebeurtenis CellEndEdit treedt alleen op wanneer de cel de bewerkingsmodus verlaat. Dit kan niet worden uitgevoerd als de validatie mislukt.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
De toepassing testen
U kunt het formulier nu testen om ervoor te zorgen dat het zich gedraagt zoals verwacht.
Om het formulier te testen
Compileer de toepassing en voer deze uit.
U ziet een DataGridView gevuld met gegevens uit de
Customerstabel. Wanneer u dubbelklikt op een cel in de kolomCompanyName, kunt u de waarde bewerken. Als u alle tekens verwijdert en op de TAB-toets drukt om de cel af te sluiten, voorkomt de DataGridView dat u de cel afsluit. Wanneer u een niet-lege tekenreeks in de cel typt, laat het besturingselement DataGridView u de cel verlaten.
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.
Controleer gebruikersinvoer op databasegerelateerde fouten. Zie Walkthrough: Afhandeling van fouten die optreden tijdens het invoeren van gegevens in het Besturingselement Windows Forms DataGridViewvoor meer informatie.
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 Hoe te: Het uiterlijk van cellen aanpassen in het Windows Forms DataGridView Controle en Hoe te: Lettertype- en kleurstijlen instellen in het Windows Forms DataGridView Controle.
Zie ook
- DataGridView
- BindingSource
- Gegevensinvoer in de Windows Forms DataGridView-controle
- Procedure: Gegevens valideren in het Besturingselement Windows Forms DataGridView
- Walkthrough: Afhandeling van fouten die optreden tijdens het invoeren van gegevens in het Windows Forms DataGridView-besturingselement
- Verbindingsgegevens beveiligen
.NET Desktop feedback