Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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 události CellValidating, která je vyvolána DataGridView, když se změní aktuální buňka.
V tomto názorném postupu načtete řádky z tabulky Customers v ukázkové databázi Northwind a zobrazíte je v ovládacím prvku DataGridView. Když uživatel upraví buňku ve sloupci CompanyName a pokusí se buňku opustit, obslužná rutina CellValidating událostí 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 opustit buňku, 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 Postupy: Ověření dat v ovládacím prvku Windows Forms DataGridView.
Požadavky
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 odvozenou od Form a obsahuje ovládací prvek DataGridView a komponentu BindingSource.
Následující příklad kódu poskytuje základní inicializaci a zahrnuje
Mainmetodu.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 ClassImplementujte metodu v definici třídy formuláře pro zpracování podrobností připojení k databázi.
Tento příklad kódu používá
GetDatametodu, která vrátí vyplněný DataTable objekt. Ujistěte se, že jste nastavili proměnnouconnectionStringna hodnotu, která je vhodná pro vaši databázi.Důležité
Ukládání citlivých informací, například hesla, v připojovacím řetězci 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 informací o připojení.
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 FunctionImplementujte obslužnou rutinu pro událost Load formuláře, která inicializuje DataGridView a BindingSource a 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 SubImplementujte obslužné rutiny pro události DataGridView a CellValidating ovládacího prvku CellEndEdit.
Obslužná rutina události CellValidating určuje, jestli je hodnota buňky ve sloupci
CompanyNameprázdná. Jestliže hodnota buňky neprojde ověřením, nastavte vlastnost Cancel třídy System.Windows.Forms.DataGridViewCellValidatingEventArgs natrue. To způsobí, že ovládací prvek DataGridView zabrání tomu, aby kurzor opustil buňku. Nastavte vlastnost ErrorText na řádku na vysvětlující řetězec. Zobrazí se ikona chyby s popisem, který obsahuje text chyby. V obslužné rutině události CellEndEdit nastavte na prázdný řetězec vlastnost ErrorText na řádku. 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í se tabulka DataGridView vyplněná daty z tabulky
Customers. Když dvakrát kliknete na buňku ve sloupciCompanyName, můžete hodnotu upravit. Pokud odstraníte všechny znaky a pokusíte se opustit buňku stisknutím klávesy TAB, DataGridView vám v tom zabrání. Když do buňky zadáte neprázdný řetězec, ovládací prvek DataGridView vám umožní z buňky vystoupit.
Další kroky
Tato aplikace vám poskytne základní znalosti o možnostech ovládacího prvku DataGridView. Vzhled a chování ovládacího prvku DataGridView 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 Windows Forms DataGridView.
Povolte nebo omezte uživatelský vstup na ovládací prvek DataGridView. Další informace naleznete v tématu Postupy: Zabránění přidávání a odstraňování řádků v ovládacím prvku Windows Forms DataGridViewa Postupy: Vytváření sloupců Read-Only v ovládacím prvku 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 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 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 Windows Forms DataGridView a Postupy: Nastavení písem a stylů barev v ovládacím prvku Windows Forms DataGridView.
Viz také
.NET Desktop feedback