Návod: Ověřování dat v ovládacím prvku Windows Forms DataGridView
Když uživatelům zobrazíte funkce zadávání dat, budete často muset ověřit data zadaná do formuláře. Třída DataGridView poskytuje pohodlný způsob, jak provést ověření před potvrzením dat do úložiště dat. Data můžete ověřit zpracováním CellValidating události, která je vyvolána DataGridView při změně aktuální buňky.
V tomto názorném postupu načtete řádky z Customers
tabulky v ukázkové databázi Northwind a zobrazíte je v ovládacím DataGridView prvku. Když uživatel upraví buňku CompanyName
ve sloupci a pokusí se buňku opustit, CellValidating obslužná rutina události prozkoumá nový řetězec názvu společnosti, aby se ujistil, že není prázdný. Pokud je nová hodnota prázdný řetězec, DataGridView zabrání uživateli v opuštění buňky kurzor, dokud nebude zadán neprázdný řetězec.
Pokud chcete zkopírovat kód v tomto tématu jako jeden výpis, přečtěte si téma Postupy: Ověření dat v ovládacím prvku model Windows Forms DataGridView.
Předpoklady
K dokončení tohoto návodu budete potřebovat:
- Přístup k serveru, který má ukázkovou databázi Northwind SQL Serveru.
Vytvoření formuláře
Ověření dat zadaných v DataGridView
Vytvořte třídu, která je odvozena a Form obsahuje DataGridView ovládací prvek a komponentu BindingSource .
Následující příklad kódu poskytuje základní inicializaci a zahrnuje metodu
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); 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 Class
Implementujte metodu v definici třídy formuláře pro zpracování podrobností připojení k databázi.
Tento příklad kódu používá metodu
GetData
, která vrací naplněný DataTable objekt. Ujistěte se, že proměnnou nastavíteconnectionString
na hodnotu, která je vhodná pro vaši databázi.Důležité
Ukládání citlivých informací, například hesla, v rámci připojovací řetězec může ovlivnit zabezpečení vaší aplikace. Ověřování systému Windows, označované také jako integrované zabezpečení, je bezpečnější způsob řízení přístupu k databázi. Další informace naleznete v tématu Ochrana Připojení ion informace.
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 Function
Implementujte obslužnou rutinu pro událost formuláře Load , která inicializuje DataGridView a BindingSource nastaví datovou vazbu.
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 Sub
Implementujte obslužné rutiny pro DataGridView události a CellEndEdit události ovládacího prvkuCellValidating.
Obslužná rutina CellValidating události určuje, jestli je hodnota buňky ve
CompanyName
sloupci prázdná. Pokud hodnota buňky selže ověření, nastavte Cancel vlastnost System.Windows.Forms.DataGridViewCellValidatingEventArgs třídy natrue
. To způsobí, že DataGridView ovládací prvek zabrání tomu, aby kurzor opustil buňku. ErrorText Nastavte vlastnost na řádku na vysvětlující řetězec. Zobrazí se ikona chyby s popisem, který obsahuje text chyby. V obslužné rutině CellEndEdit události nastavte ErrorText vlastnost na řádku na prázdný řetězec. Událost CellEndEdit nastane pouze v případě, že buňka ukončí režim úprav, který nemůže provést, pokud selže ověření.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
Testování aplikace
Formulář teď můžete otestovat a ujistit se, že se chová podle očekávání.
Otestování formuláře
Zkompilujte a spusťte aplikaci.
Zobrazí DataGridView se vyplněná data z
Customers
tabulky. Když dvakrát kliknete na buňkuCompanyName
ve sloupci, můžete upravit hodnotu. Pokud odstraníte všechny znaky a stisknutím klávesy TAB ukončíte buňku, DataGridView zabráníte ukončení buňky. Když do buňky zadáte neprázdný řetězec, DataGridView ovládací prvek vám umožní buňku ukončit.
Další kroky
Tato aplikace vám poskytne základní znalosti DataGridView možností ovládacího prvku. Vzhled a chování DataGridView ovládacího prvku můžete přizpůsobit několika způsoby:
Umožňuje změnit styly ohraničení a záhlaví. Další informace naleznete v tématu Postupy: Změna stylů ohraničení a mřížky v ovládacím prvku model Windows Forms DataGridView.
Povolte nebo omezte uživatelský vstup na DataGridView ovládací prvek. Další informace naleznete v tématu Postupy: Zabránění přidávání a odstraňování řádků v ovládacím prvku model Windows Forms DataGridView a Postupy: Vytváření sloupců jen pro čtení v ovládacím prvku model Windows Forms DataGridView.
Zkontrolujte, jestli uživatelské zadání obsahuje chyby související s databází. Další informace naleznete v tématu Návod: Zpracování chyb, ke kterým dochází při zadávání dat v ovládacím prvku model Windows Forms DataGridView.
Zpracování velmi velkých datových sad pomocí virtuálního režimu Další informace naleznete v tématu Návod: Implementace virtuálního režimu v ovládacím prvku model Windows Forms DataGridView.
Přizpůsobte vzhled buněk. Další informace naleznete v tématu Postupy: Přizpůsobení vzhledu buněk v ovládacím prvku model Windows Forms DataGridView a postupy: Nastavení písem a stylů barev v ovládacím prvku model Windows Forms DataGridView.
Viz také
.NET Desktop feedback
Váš názor
https://aka.ms/ContentUserFeedback.
Připravujeme: V průběhu roku 2024 budeme postupně vyřazovat problémy z GitHub coby mechanismus zpětné vazby pro obsah a nahrazovat ho novým systémem zpětné vazby. Další informace naleznete v tématu:Odeslat a zobrazit názory pro