Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Amikor adatbeviteli funkciókat jelenít meg a felhasználók számára, gyakran ellenőriznie kell az űrlapon beírt adatokat. A DataGridView osztály kényelmes módot kínál az ellenőrzés végrehajtására, mielőtt az adatok le lesznek kötelezve az adattárra. Az adatokat a CellValidating esemény kezelésével ellenőrizheti, amelyet a DataGridView az aktuális cella változásakor emel ki.
Ebben az útmutatóban lekéri a sorokat a Northwind mintaadatbázis Customers táblájából, és megjeleníti őket egy DataGridView vezérlőelemben. Amikor egy felhasználó szerkeszt egy cellát a CompanyName oszlopban, és megpróbálja elhagyni a cellát, az CellValidating eseménykezelő megvizsgálja az új cégnév-sztringet, hogy biztosan ne legyen üres; ha az új érték egy üres sztring, a DataGridView megakadályozza, hogy a felhasználó kurzora elhagyja a cellát, amíg be nem írja a nem üres sztringet.
Ha a jelen témakörben szereplő kódot egyetlen listaelemként szeretné másolni, tekintse meg : Adatok ellenőrzése a Windows Forms DataGridView vezérlő.
Előfeltételek
Az útmutató elvégzéséhez a következőkre lesz szüksége:
- Hozzáférés a Northwind SQL Server mintaadatbázissal rendelkező kiszolgálóhoz.
Az űrlap létrehozása
DataGridView-ban megadott adatok ellenőrzése
Hozzon létre egy Form származó osztályt, amely egy DataGridView vezérlőelemet és egy BindingSource összetevőt tartalmaz.
Az alábbi példakód alapvető inicializálást biztosít, és tartalmaz egy
Mainmetódust.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 ClassImplementáljon egy metódust az űrlap osztálydefiníciójában az adatbázishoz való csatlakozás részleteinek kezelésére.
Ez a példakód egy
GetDatametódust használ, amely egy kitöltött DataTable objektumot ad vissza. Győződjön meg arról, hogy aconnectionStringváltozót az adatbázisnak megfelelő értékre állítja.Fontos
A bizalmas adatok, például a jelszó a kapcsolati sztringen belül történő tárolása hatással lehet az alkalmazás biztonságára. A Windows-hitelesítés, más néven integrált biztonság használata biztonságosabb módszer az adatbázisokhoz való hozzáférés szabályozására. További információ: Kapcsolati adatok védelme.
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 FunctionImplementáljon egy kezelőt az űrlap Load eseményéhez, amely inicializálja a DataGridView és BindingSource, és beállítja az adatkötést.
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 SubA DataGridView vezérlő CellValidating és CellEndEdit eseményeinek kezelőinek implementálása.
Az CellValidating eseménykezelő határozza meg, hogy a
CompanyNameoszlopban lévő cella értéke üres-e. Ha a cellaérték érvényesítése sikertelen, állítsa a Cancel osztály System.Windows.Forms.DataGridViewCellValidatingEventArgs tulajdonságáttrueértékre. Emiatt a DataGridView vezérlőelem megakadályozza, hogy a kurzor elhagyja a cellát. Állítsa a sor ErrorText tulajdonságát egy magyarázó szövegre. Ez egy hibaikont jelenít meg a hibaszöveget tartalmazó elemleírással. A CellEndEdit eseménykezelőben állítsd a sor ErrorText tulajdonságát üres karakterláncra. A CellEndEdit esemény csak akkor fordul elő, ha a cella kilép a szerkesztési módból, amelyet nem tud megtenni, ha sikertelen az ellenőrzés.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
Az alkalmazás tesztelése
Mostantól tesztelheti az űrlapot, hogy megbizonyosodjon róla, hogy a várt módon viselkedik.
Az űrlap tesztelése
Állítsa össze és futtassa az alkalmazást.
Megjelenik egy DataGridView, amely a
Customerstáblából származó adatokkal van kitöltve. Ha duplán kattint egy cellára aCompanyNameoszlopban, szerkesztheti az értéket. Ha törli az összes karaktert, és a TAB billentyűt lenyomva kilép a cellából, a DataGridView megakadályozza a kilépést. Ha nem üres karakterláncot ír be a cellába, a DataGridView vezérlővel kiléphet a cellából.
Következő lépések
Ez az alkalmazás alapvető ismereteket nyújt a DataGridView vezérlő képességeiről. A DataGridView vezérlőelem megjelenését és viselkedését többféleképpen is testre szabhatja:
Módosítsa a szegély- és fejlécstílusokat. További információért lásd: Útmutató: A szegély- és rácsvonalstílusok módosítása a Windows Forms DataGridView vezérlőben.
Engedélyezze vagy korlátozza a felhasználói bevitelt a DataGridView vezérlőelemre. További információkért lásd: Sorok hozzáadásának és törlésének megakadályozása a Windows Forms DataGridView vezérlőben, és Oszlopok létrehozása Read-Only a Windows Forms DataGridView vezérlőben.
Ellenőrizze a felhasználói bevitelt az adatbázissal kapcsolatos hibák esetén. További információért lásd a útmutatót: Az adatbevitel során előforduló hibák kezelése a Windows Forms DataGridView vezérlőben.
Nagyon nagy adatkészletek kezelése virtuális módban. További információért lásd: Útmutató: Virtuális mód implementálása a Windows Forms DataGridView vezérlőben.
A cellák megjelenésének testreszabása. További részletekért tekintse meg: Hogyan szabjuk testre a cellák megjelenését a Windows Forms DataGridView vezérlőben, valamint Hogyan állítsuk be a betűtípus- és színstílusokat a Windows Forms DataGridView vezérlőben.
Lásd még
.NET Desktop feedback