Megosztás a következőn keresztül:


Útmutató: Adatok érvényesítése a Windows Forms DataGridView vezérlőben

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

  1. 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 Main metó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 Class
    
  2. Implementá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 GetData metódust használ, amely egy kitöltött DataTable objektumot ad vissza. Győződjön meg arról, hogy a connectionString vá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 Function
    
  3. Implementá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 Sub
    
  4. A DataGridView vezérlő CellValidating és CellEndEdit eseményeinek kezelőinek implementálása.

    Az CellValidating eseménykezelő határozza meg, hogy a CompanyName oszlopban 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át trueé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 Customers táblából származó adatokkal van kitöltve. Ha duplán kattint egy cellára a CompanyName oszlopban, 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:

Lásd még