مشاركة عبر


الإرشادات التفصيلية: التحقق من صحة بيانات في عرض شبكة بيانات Windows Forms عنصر تحكم

عند عرض بيانات الأداء الوظيفي لإدخال إلى المستخدمين، بشكل متكرر لديك إلى التحقق من صحة بيانات المدخلة في إلى النموذج الخاص بك. DataGridViewفئة يوفر طريقة ملائمة لإجراء التحقق من صحة قبل تاريخ هو الملتزم بها إلى مخزن بيانات. يمكنك التحقق من صحة بيانات بمعالجة CellValidatingحدث، والتي هو raهوed DataGridViewعند خلية الحالي التغييرات.

في هذه المعاينة, سيتم استرداد صفوف من جدول Customers في قاعدة بيانات نموذج Northwind وعرضها في عنصر تحكم DataGridView. عندما مستخدم بتحرير خلية في CompanyNameيحاول المغادرة الخلية، والأعمدة CellValidatingسيقوم معالج الأحداث بفحص سلسلة اسم الشركة الجديدة للتأكد من أنه هو غير فارغ; إذا القيمة الجديدة هو سلسلة فارغ، DataGridViewسيمنع مؤشر المستخدم من المغادرة الخلية حتى سلسلة غير فارغ هو إدخالها.

لنسخ التعليمة البرمجية في هذا الموضوع كقائمة واحدة, راجع كيفية القيام بما يلي: التحقق من صحة بيانات في عرض شبكة بيانات Windows Forms عنصر تحكم.

المتطلبات الأساسية

لإكمال هذه المعاينة ، سوف تحتاج إلى :

  • الاتصال بخادم قاعدة البيانات الذي يحتوي على نموذج Northwind SQL Server.

إنشاء نموذج

للتحقق من صحة بيانات المدخلة في عرض شبكة البيانات

  1. إنشاء فئة مشتقة من Form تحتوي على عنصر تحكم DataGridView و مكوّن BindingSource.

    يوفر مثال التعليمات البرمجية التالي التهيئة الأساسية ويتضمين أسلوب Main.

    Imports System
    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()> _
        Shared Sub Main()
            Application.EnableVisualStyles()
            Application.Run(New Form1())
        End Sub
    
    End Class
    
    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)";
        }
    
    
    ...
    
    
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.Run(new Form1());
        }
    
    }
    
  2. قم بتنفيذ أسلوب تعريف الفئة في النموذج الخاص بك للتعامل مع تفاصيل الاتصال بقاعدة البيانات.

    يستخدم مثال التعليمات البرمجية هذا أسلوب GetData الذي يقوم بإرجاع كائن DataTable. تأكد من تعيين متغيّر connectionString إلى قيمة مناسبة لقاعدة البيانات الخاصة بك.

    ملاحظة الأمانملاحظة الأمان

    تخزين معلومات حساسة مثل كلمة مرور في سلسلة اتصال يمكن أن يؤثر على أمن التطبيق الخاص بك. ويتم استخدام مصادقة Windows، الأمان متكامل يعرف أيضا، بطريقة أكثر أماناً للتحكم في الوصول إلى قاعدة بيانات. لمزيد من المعلومات، راجع Protecting Connection Information (ADO.NET).

    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
    
    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;
    }
    
  3. تطبيق معالجة حدث Load للنموذج الخاص بك الذي يقوم بتهيئة DataGridView و BindingSource و تعيين ربط البيانات.

    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
    
    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);
    }
    
  4. قم بتطبيق معالجات ل DataGridViewعنصر تحكم ل CellValidatingو CellEndEditالأحداث.

    CellValidatingمعالج الأحداث هو الموقع يمكنك تحديد ما إذا كانت القيمة خلية في CompanyNameالعمود هو فارغة. إذا كانت القيمة خلية فشل التحقق من صحة، التعيين Cancelخاصية System.Windows.Forms.DataGridViewCellValidatingEventArgsالفئة إلى true. يؤدي هذا إلى DataGridViewعنصر تحكم لمنع المؤشر من ترك خلية. بتعيين ErrorTextخاصية تشغيل الصف إلى تشغيل سلسلة explanaإلىry. يقوم بعرض رمز خطأ مع تلميح أدوات الذي يحتوي على نص الخطأ. في CellEndEditمعالج الأحداث، التعيين ErrorTextخاصية تشغيل صف إلى سلسلة فارغ. CellEndEditإجراء حدث فقط عندما يخرج خلية الوضع التحرير، التي لن إذا فشل التحقق من صحة.

    Private Sub dataGridView1_CellValidating(ByVal sender As Object, _
        ByVal e As DataGridViewCellValidatingEventArgs) _
        Handles dataGridView1.CellValidating
    
        ' Validate the CompanyName entry by disallowing empty strings.
        If dataGridView1.Columns(e.ColumnIndex).Name = "CompanyName" Then
            If e.FormattedValue IsNot Nothing AndAlso _
                String.IsNullOrEmpty(e.FormattedValue.ToString()) Then
    
                dataGridView1.Rows(e.RowIndex).ErrorText = _
                    "Company Name must not be empty"
                e.Cancel = True
    
            End If
        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
    
    private void dataGridView1_CellValidating(object sender,
        DataGridViewCellValidatingEventArgs e)
    {
        // Validate the CompanyName entry by disallowing empty strings.
        if (dataGridView1.Columns[e.ColumnIndex].Name == "CompanyName")
        {
            if (e.FormattedValue == null && 
                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;
    }
    

اختبار التطبيق

يمكنك الآن اختبار النموذج للتأكد من أنه يعمل كما هو متوقع.

لاختبار النموذج

  • قم بالترجمة ثم قم بتشغيل التطبيق الخاص بك.

    سترى DataGridViewبالبيانات من Customersجدول. عندما تنقر نقراً مزدوجاً فوق إحدى خلايا في CompanyNameعمود، يمكنك تحرير القيمة. إذا قمت بحذف الجميع حرف/ حروف الموجودة واضغط على المفتاح علامة تبويب إلى إنهاء خلية، DataGridViewيمنعك من الخروج. عند كتابة سلسلة غير فارغ في خلية، DataGridViewعنصر تحكم يسمح لك بإنهاء خلية.

الخطوات التالية

يمنحك هذا التطبيق فهم أساسي لقدرات عنصر تحكم DataGridView. يمكنك تخصيص مظهر وسلوك عنصر تحكم DataGridView بعدة طرق:

راجع أيضًا:

المهام

كيفية القيام بما يلي: التحقق من صحة بيانات في عرض شبكة بيانات Windows Forms عنصر تحكم

الإرشادات التفصيلية: معالجة الأخطاء التي تحدث أثناء إدخال البيانات في عنصر تحكم DataGridView الخاص بـ Windows Forms

المرجع

DataGridView

BindingSource

المبادئ

Protecting Connection Information (ADO.NET)

موارد أخرى

إدخال البيانات في عنصر تحكم DataGridView Windows Forms