مشاركة عبر


الوضع ظاهري في عنصر تحكم DataRepeater (‏‫Visual Studio)

عمدما تريد عرض كميات كبيرة من البيانات الجدولية في عنصر التحكم DataRepeater ، يمكنك تحسين الأداء بواسطة تعيين الخاصية VirtualMode إلى True و إدارة تفاعل عنصر التحكم مع مصدر البيانات الخاص به بوضوح . و عنصر التحكم DataRepeater يوفر العديد من الأحداث التي يمكنك معالجتها للتفاعل مع مصدر البيانات و عرض البيانات حسب الحاجة في وقت التشغيل .

كيف يعمل الوضع ظاهري

السيناريو الأكثر شيوعاً لعنصر التحكم DataRepeater ، تعتبر وسائل لربط عناصر التحكم التابعة لـ ItemTemplate بمصدر البيانات في وقت التصميم و السماح لـ BindingSource بتمرير البيانات ذهاباً و إياباً حسب الحاجة. و عند استخدام الوضع الظاهري فإن عناصر التحكم لا ترتبط بمصدر البيانات ، و يتم تمرير البيانات ذهاباً و إياباً إلى مصدر البيانات الأساسي في وقت التشغيل.

و عند تعيين خاصية VirtualMode إلى True، فإنك تنشئ واجهة مستخدم عن طريق إضافة عناصر التحكم الموجودة في مربع الأدوات بدلاً من إضافة عناصر تحكم المحدودة من نافذةمصادر البيانات .

و يتم رفع الأحداث على أساس تتابع عناصر التحكم ، ثم يجب عليك إضافة التعليمات البرمجية لمعالجة عرض البيانات . و عند تمرير DataRepeaterItem جديد في العرض ، يتم رفع حدث ItemValueNeeded مرة واحدة لكل عنصر تحكم كما يجب توفير القيم لكل عنصر تحكم في معالج الأحداث ItemValueNeeded .

و في حالة تم تغيير البيانات في أحد عناصر التحكم بواسطة المستخدم ، يتم رفع حدث ItemValuePushed و يجب التحقق من صحة البيانات ثم حفظها إلى مصدر البيانات.

إذا أضاف المستخدم عنصر جديد ، يتم رفع حدث NewItemNeeded . استخدم معالج الحدث هذا لإنشاء سجل جديد في مصدر البيانات. و لمنع التغييرات غير المقصودة ، يجب عليك أيضاً مراقبة حدث KeyDown لكل عنصر تحكم و استدعاء CancelEdit إذا ضغط المستخدم على مفتاح ESC .

و إذا تغير مصدر البيانات ، يمكنك تحديث عنصر التحكم DataRepeater عن طريق استدعاء أساليب BeginResetTemplateItem() و EndResetTemplateItem() . يجب استدعاء كلا الأسلوبين بالترتيب.

و أخيراً ، يجب تطبيق معالجات الحدث لحدث ItemsRemoved , الذي يحدث عند حذف عنصر و اختيارياً للأحداث UserDeletingItems و UserDeletedItems, و التي تحدث عندما يقوم المستخدم بحذف عنصر عن طريق الضغط على مفتاح DELETE .

تطبيق الوضع الظاهري

فيما يلي الخطوات اللازمة لتطبيق الوضع الظاهري.

لتطبيق الوضع الظاهري

  1. اسحب عنصر التحكم DataRepeater من علامة تبويب Visual Basic PowerPacks في مربع الأدوات إلى النموذج أو عنصر تحكم الحاوية. قم بتعيين VirtualModeإلى خاصية True.

  2. اسحب عناصر التحكم من مربع الأدوات إلى منطقة قالب العنصر (المنطقة العلوية) من عنصر التحكم DataRepeater . ستحتاج لعنصر تحكم واحد لكل حقل في مصدر البيانات الذي تريد عرضه .

  3. قم بتطبيق المعالج لحدث ItemValueNeeded لتوفير قيم لكل عنصر تحكم. يتم رفع هذا الحدث عند تمرير DataRepeaterItem جديد في العرض. سوف تشبه التعليمات البرمجية المثال التالي ، و هو لمصدر البيانات باسم Employees.

    Private Sub DataRepeater1_ItemValueNeeded(
        ByVal sender As Object, 
        ByVal e As Microsoft.VisualBasic.PowerPacks.DataRepeaterItemValueEventArgs
      ) Handles DataRepeater1.ItemValueNeeded
        If e.ItemIndex < Employees.Count Then
            Select Case e.Control.Name
                Case "txtFirstName"
                    e.Value = Employees.Item(e.ItemIndex + 1).firstName
                Case "txtLastName"
                    e.Value = Employees.Item(e.ItemIndex + 1).lastName
            End Select
        End If
    End Sub
    
    private void dataRepeater1_ItemValueNeeded(object sender, Microsoft.VisualBasic.PowerPacks.DataRepeaterItemValueEventArgs e)
    {
        if (e.ItemIndex < Employees.Count)
        {
            switch (e.Control.Name)
            {
                case "txtFirstName":
                    e.Value = Employees[e.ItemIndex + 1].firstName;
                    break;
                case "txtLastName":
                    e.Value = Employees[e.ItemIndex + 1].lastName;
                    break;
            }
        }
    }
    
  4. تطبيق المعالج لحدث ItemValuePushed لتخزين البيانات . يتم رفع هذا الحدث عندما يقوم المستخدم بتنفيذ التغييرات لعنصر التحكم التابع لـ DataRepeaterItem. سوف تشبه التعليمات البرمجية المثال التالي ، و هو لمصدر البيانات باسم Employees.

    Private Sub DataRepeater1_ItemValuePushed(
        ByVal sender As Object, 
        ByVal e As Microsoft.VisualBasic.PowerPacks.DataRepeaterItemValueEventArgs
      ) Handles DataRepeater1.ItemValuePushed
    
        Dim emp As Employee = Employees.Item(e.ItemIndex)
        Select Case e.Control.Name
            Case "txtFirstName"
                emp.firstName = e.Control.Text
            Case "txtLastName"
                emp.lastName = e.Control.Text
            Case Else
                MsgBox("Error during ItemValuePushed unexpected control: " & 
                    e.Control.Name)
        End Select
    End Sub
    
    private void dataRepeater1_ItemValuePushed(object sender, Microsoft.VisualBasic.PowerPacks.DataRepeaterItemValueEventArgs e)
    {
        Employee emp = Employees[e.ItemIndex];
        switch (e.Control.Name)
        {
            case "txtFirstName":
                emp.firstName = e.Control.Text;
                break;
            case "txtLastName":
                emp.lastName = e.Control.Text;
                break;
            default:
                MessageBox.Show("Error during ItemValuePushed unexpected control: " + e.Control.Name);
                break;
        }
    }
    
  5. تطبيق المعالج لكل عنصر تحكم تابع لحدث KeyDown و يراقب مفتاح ESC. استدعاء أسلوب CancelEdit يمنع حدث ItemValuePushed من أن يتم رفعه . ستمثل التعليمات البرمجية مثال التعليمات البرمجية التالية:

    Private Sub Child_KeyDown(
        ByVal sender As Object, 
        ByVal e As System.Windows.Forms.KeyEventArgs
      ) Handles txtFirstName.KeyDown, txtLastName.KeyDown
    
        If e.KeyCode = Keys.Escape Then
            Datarepeater1.CancelEdit()
        End If
    End Sub
    
    private void child_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e)
    {
        if (e.KeyCode == Keys.Escape)
        {
            this.dataRepeater1.CancelEdit();
        }
    }
    
  6. تطبيق المعالج لحدث NewItemNeeded . يسبب رفع هذا الحدث عندما يضيف المستخدم عنصر جديد إلى عنصر التحكم DataRepeater . سوف تشبه التعليمات البرمجية المثال التالي ، و هو لمصدر البيانات باسم Employees.

    Private Sub DataRepeater1_NewItemNeeded(
      ) Handles DataRepeater1.NewItemNeeded
    
        Dim newEmployee As New Employee
        Employees.Add(newEmployee)
        blnNewItemNeedEventFired = True
    End Sub
    
    private void dataRepeater1_NewItemNeeded(object sender, System.EventArgs e)
    {
        Employee newEmployee = new Employee();
        Employees.Add(newEmployee);
        blnNewItemNeedEventFired = true;
    }
    
  7. تطبيق المعالج لحدث ItemsRemoved . يحدث هذا الحدث عند قيام المستخدم بحذف عنصر موجود. سوف تشبه التعليمات البرمجية المثال التالي ، و هو لمصدر البيانات باسم Employees.

    Private Sub DataRepeater1_ItemsRemoved(
        ByVal sender As Object, 
        ByVal e As Microsoft.VisualBasic.PowerPacks.DataRepeaterAddRemoveItemsEventArgs
      ) Handles DataRepeater1.ItemsRemoved
    
        Employees.RemoveAt(e.ItemIndex)
    End Sub
    
    private void dataRepeater1_ItemsRemoved(object sender, Microsoft.VisualBasic.PowerPacks.DataRepeaterAddRemoveItemsEventArgs e)
    {
        Employees.RemoveAt(e.ItemIndex);
    }
    
  8. للتحقق من صحة مستوى عنصر التحكم , نفذ المعالجات لأحداث Validating لعنصر التحكم التابع بشكل اختياري. ستمثل التعليمات البرمجية مثال التعليمات البرمجية التالية:

    Private Sub Text_Validating(
        ByVal sender As Object, 
        ByVal e As System.ComponentModel.CancelEventArgs
      ) Handles txtFirstName.Validating, txtLastName.Validating
    
        If txtFirstName.Text = "" Then
            MsgBox("Please enter a name.")
            e.Cancel = True
        End If
    End Sub
    
    private void Text_Validating(object sender, System.ComponentModel.CancelEventArgs e)
    {
        if (txtFirstName.Text == "")
        {
            MessageBox.Show("Please enter a name.");
            e.Cancel = true;
        }
    }
    

راجع أيضًا:

المرجع

ItemValuePushed

NewItemNeeded

ItemValueNeeded

المبادئ

مقدمة إلى عنصر التحكم DataRepeater (‏‫Visual Studio)