İzlenecek yol: Windows Forms DataGridView Denetimindeki Verileri Doğrulama
Kullanıcılara veri girişi işlevselliğini görüntüleyebilirsiniz. Sıklıkla forma girilen verileri doğrulamanız gerekir. sınıfı, DataGridView veriler veri deposuna işlenmeden önce doğrulama gerçekleştirmek için kullanışlı bir yol sağlar. Geçerli hücrenin ne zaman CellValidating değiştikleri tarafından belirtilen olayı DataGridView işerek verileri doğruabilirsiniz.
Bu kılavuzda Northwind örnek Customers veritabanındaki tablodan satırlar alır ve bunları bir denetimde DataGridView görüntülersiniz. Kullanıcı sütundaki bir hücreyi düzenleyinceye ve hücreden ayrılmaya çalıştığında, olay işleyicisi boş olduğundan emin olmak için yeni şirket adı dizesini inceler; yeni değer boş bir dize ise, kullanıcı imlecinin boş olmayan bir dize girilene kadar hücreden ayrılmasını CompanyNameCellValidatingDataGridView önler.
Bu konudaki kodu tek bir liste olarak kopyalamak için bkz. How to: Validate Data in the Windows Forms DataGridView Control.
Önkoşullar
Bu izlenecek yolu tamamlamak için aşağıdakiler gerekir:
- Northwind veritabanına sahip bir sunucuya erişim SQL Server veritabanı.
Form Oluşturma
DataGridView'a girilen verileri doğrulamak için
'den türeten ve bir Form denetim ve bileşen içeren bir sınıf DataGridViewBindingSource oluşturun.
Aşağıdaki kod örneği temel başlatma sağlar ve bir yöntemi
Mainiçerir.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 ClassVeritabanına bağlanma ayrıntılarını işlemeye ilişkin form sınıf tanımında bir yöntem uygulama.
Bu kod örneği doldurulmuş
GetDatabir nesne döndüren bir yöntem DataTable kullanır. değişkenini veritabanınızconnectionStringiçin uygun bir değere ayarlayasınız.Önemli
Bağlantı dizesi içinde parola gibi hassas bilgilerin depolanması, uygulamanın güvenliğini etkileyebilir. Tümleşik Windows olarak da bilinen Kimlik Doğrulaması'nın kullanımı, veritabanına erişimi denetlemenin daha güvenli bir yolu olabilir. Daha fazla bilgi için bkz. Bağlantı Bilgilerini Koruma.
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 FunctionVe'i başlatan ve veri bağlamayı ayaran form olay LoadDataGridView için bir BindingSource işleyici uygulama.
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 SubDenetimin ve olayların DataGridViewCellValidating işleyicilerini CellEndEdit uygulama.
Olay CellValidating işleyicisi, sütundaki bir hücrenin değerinin boş olup
CompanyNameolmadığını belirlersiniz. Hücre değeri doğrulamada başarısız olursa, sınıfının Cancel özelliğini System.Windows.Forms.DataGridViewCellValidatingEventArgs olaraktrueayarlayın. Bu, DataGridView denetimin imlecin hücreden ayrılmasını önlemesine neden olur. Satırdaki ErrorText özelliğini açıklayıcı bir dize olarak ayarlayın. Bu, hata metnini içeren bir ToolTip içeren bir hata simgesi görüntüler. Olay CellEndEdit işleyicisinde, ErrorText satırdaki özelliğini boş dizeye ayarlayın. Olay CellEndEdit yalnızca hücre düzenleme modundan çıksa gerçekleşir ve doğrulama başarısız olursa bu işlem başarısız olur.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
Uygulamayı Test Etme
Artık formu test etmek için beklendiği gibi davranarak emin olun.
Formu test etmek için
Uygulamayı derle ve çalıştır.
Tablodan DataGridView verilerle doldurulmuş bir
Customerstabloyu alırsınız. Sütundaki bir hücreye çiftCompanyNametıklarken değeri düzenleyebilirsiniz. Tüm karakterleri siler ve hücreden çıkmak için SEKME tuşuna basın. DataGridView Hücreye boş olmayan bir dize yazarak, denetim DataGridView hücreden çıkmana olanak sağlar.
Sonraki Adımlar
Bu uygulama, denetimin özellikleri hakkında DataGridView temel bir anlayış sağlar. Denetimin görünümünü ve davranışını çeşitli DataGridView yollarla özelleştirebilirsiniz:
Kenarlık ve üst bilgi stillerini değiştirme. Daha fazla bilgi için, bkz. How to: Change the Border and Gridline Styles in the Windows Forms DataGridView Control.
Denetime kullanıcı girişini etkinleştirin veya DataGridView kısıtlar. Daha fazla bilgi için bkz. Windows Forms DataGridViewDenetiminde Satır Ekleme ve Silmeyi Engelleme ve Nasıl Ekleyebilirsiniz: Windows Forms DataGridViewDenetiminde Sütunları Read-Only Yapma.
Veritabanıyla ilgili hatalar için kullanıcı girişini denetleyin. Daha fazla bilgi için bkz. Walkthrough: Windows Forms DataGridViewDenetiminde Veri Girişi Sırasında Oluşan Hataları İşleme.
Sanal modu kullanarak çok büyük veri kümelerini işleme. Daha fazla bilgi için bkz. Walkthrough: Implementing Virtual Mode in the Windows Forms DataGridView Control.
Hücrelerin görünümünü özelleştirme. Daha fazla bilgi için, bkz. How to: Customize the Appearance of Cells in the Windows Forms DataGridView Control ve How to: Set Font and Color Styles in the Windows Forms DataGridView Control.