İ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

  1. '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 Main iç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 Class
    
  2. Veritabanı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ş GetData bir nesne döndüren bir yöntem DataTable kullanır. değişkenini veritabanınız connectionString iç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 Function
    
  3. Ve'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 Sub
    
  4. Denetimin ve olayların DataGridViewCellValidating işleyicilerini CellEndEdit uygulama.

    Olay CellValidating işleyicisi, sütundaki bir hücrenin değerinin boş olup CompanyName olmadığı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 olarak true ayarlayı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 Customers tabloyu alırsınız. Sütundaki bir hücreye çift CompanyName tı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:

Ayrıca bkz.