Návod: Ověřování dat v ovládacím prvku Windows Forms DataGridView

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 CellValidating události, která je vyvolána DataGridView při změně aktuální buňky.

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. Když uživatel upraví buňku CompanyName ve sloupci a pokusí se buňku opustit, CellValidating obslužná rutina události 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 v opuštění buňky kurzor, 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 téma Postupy: Ověření 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

Ověření dat zadaných v DataGridView

  1. 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);
            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. 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íte connectionString 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. 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 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.
        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. 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 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. Implementujte obslužné rutiny pro DataGridView události a CellEndEdit události ovládacího prvkuCellValidating.

    Obslužná rutina CellValidating události určuje, jestli je hodnota buňky ve CompanyName sloupci prázdná. Pokud hodnota buňky selže ověření, nastavte Cancel vlastnost System.Windows.Forms.DataGridViewCellValidatingEventArgs třídy na true. To způsobí, že DataGridView ovládací prvek zabrání tomu, aby kurzor opustil buňku. ErrorText Nastavte vlastnost na řádku na vysvětlující řetězec. Zobrazí se ikona chyby s popisem, který obsahuje text chyby. V obslužné rutině CellEndEdit události nastavte ErrorText vlastnost na řádku na prázdný řetězec. 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í DataGridView se vyplněná data z Customers tabulky. Když dvakrát kliknete na buňku CompanyName ve sloupci, můžete upravit hodnotu. Pokud odstraníte všechny znaky a stisknutím klávesy TAB ukončíte buňku, DataGridView zabráníte ukončení buňky. Když do buňky zadáte neprázdný řetězec, DataGridView ovládací prvek vám umožní buňku ukončit.

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:

Viz také