Návod: Zpracování chyb vzniklých při zadávání dat v ovládacím prvku Windows Forms DataGridView
Zpracování chyb z podkladového úložiště dat je požadovaná funkce pro aplikaci pro zadávání dat. Ovládací prvek model Windows Forms DataGridView to usnadňuje zveřejněním DataError události, která se vyvolá, když úložiště dat zjistí porušení omezení nebo porušení obchodního pravidla.
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. Při zjištění duplicitní CustomerID
hodnoty v novém řádku nebo upraveném existujícím řádku DataError dojde k události, která bude zpracována zobrazením MessageBox popisující výjimku.
Pokud chcete zkopírovat kód v tomto tématu jako jeden výpis, přečtěte si článek Postupy: Zpracování chyb, ke kterým dochází při zadávání 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
Zpracování chyb při zadávání dat v ovládacím prvku 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); }
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 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. Bezpečnější způsob, jak řídit přístup k databázi, je ověřování systému Windows (označované také jako integrované zabezpečení). 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, 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 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 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 Sub
DataError Zpracování události v souboru DataGridView.
Pokud je kontextem chyby operace potvrzení, zobrazte chybu v souboru 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
Testování aplikace
Formulář teď můžete otestovat a ujistit se, že se chová podle očekávání.
Otestování formuláře
Stisknutím klávesy F5 spusťte aplikaci.
Zobrazí DataGridView se ovládací prvek naplněný daty z tabulky Zákazníci. Pokud zadáte duplicitní hodnotu pro
CustomerID
úpravy a potvrdíte ji, vrátí se hodnota buňky automaticky a zobrazí MessageBox se chyba při zadávání dat.
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.
Ověřte vstup uživatele do DataGridView ovládacího prvku. Další informace naleznete v tématu Návod: Ověřová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í výchozích stylů buněk pro ovládací prvek 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