Tryb wirtualny w formancie DataRepeater (Visual Studio)

Kiedy mają być wyświetlane duże ilości danych tabelarycznych w DataRepeater kontroli, można zwiększyć wydajność przez ustawienie VirtualMode właściwość, aby True i wyraźnie zarządzanie Interakcja formantu ze źródłem danych.DataRepeater Kontroli udostępnia kilka zdarzeń, które może obsłużyć do interakcji z źródła danych i wyświetlić dane, w razie potrzeby w czasie wykonywania.

W jaki sposób wirtualne tryb programu Works

Najbardziej typowym scenariuszem dla DataRepeater kontroli jest powiązać formantów podrzędnych z ItemTemplate do danych źródła w czasie projektowania i pozwolić BindingSource do przekazywania danych i z powrotem w razie potrzeby.Gdy tryb wirtualny formanty nie są powiązane ze źródłem danych, a dane są przekazywane i z powrotem do źródła danych w czasie wykonywania.

Gdy VirtualMode właściwość jest ustawiona na True, utworzyć interfejs użytkownika przez dodanie formantów z Przybornik zamiast dodawać formanty związane z Źródeł danych okna.

Zdarzenia są wywoływane na podstawie przez formant, a następnie należy dodać kod obsługi wyświetlania danych.Gdy nowy DataRepeaterItem jest przewijane do widoku, ItemValueNeeded zdarzenie jest wywoływane jeden raz dla każdego formantu i należy podać wartości dla każdego formantu w ItemValueNeeded programu obsługi zdarzeń.

Po zmianie danych w jednym z formantów przez użytkownika, ItemValuePushed zdarzenie jest wywoływane i musi sprawdzić poprawność danych i zapisać go w źródle danych.

Jeśli użytkownik doda nowy element, NewItemNeeded zdarzenie jest wywoływane.Program obsługi tego zdarzenia umożliwia tworzenie nowego rekordu w źródle danych.Aby uniknąć niezamierzonych zmian, należy również monitorować KeyDown zdarzenia dla każdego formantu i wywołanie CancelEdit , jeśli użytkownik naciśnie klawisz ESC.

Jeśli zmiany źródła danych, można odświeżyć DataRepeater kontroli przez wywołanie BeginResetTemplateItem i EndResetTemplateItem metody.Obie metody musi być wywołany w kolejności.

Wreszcie, należy zaimplementować obsługę zdarzeń dla ItemsRemoved zdarzenie, które występuje, gdy element zostanie usunięty, a opcjonalnie dla UserDeletingItems i UserDeletedItems zdarzenia, które występują w każdym przypadku, gdy użytkownik usuwa element przez naciśnięcie klawisza DELETE.

Tryb wirtualny wykonawcze

Poniżej przedstawiono kroki, które są wymagane do wdrożenia w trybie wirtualnym.

Aby zaimplementować tryb wirtualny

  1. Przeciągnij DataRepeater kontroli z PowerPacks programu Visual Basic kartę w Przybornik do formantu formularza lub kontenera.Ustaw VirtualMode właściwość, aby True.

  2. Przeciągnij formanty z Przybornik na region (region górnej) szablonu elementu z DataRepeater kontroli.Konieczne będzie jeden formant dla każdego pola w źródle danych, który chcesz wyświetlić.

  3. Wdrożenie programu obsługi dla ItemValueNeeded zdarzenie, aby podać wartości dla każdego formantu.To zdarzenie jest wywoływane, gdy nowy DataRepeaterItem jest przewijane do widoku.Kod będzie przypominał poniższy przykład, który jest źródłem danych o nazwie 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. Wdrożenie programu obsługi dla ItemValuePushed zdarzeń do przechowywania danych.To zdarzenie jest wywoływane, gdy użytkownik zatwierdza zmiany do kontroli dziecko DataRepeaterItem.Kod będzie przypominał poniższy przykład, który jest źródłem danych o nazwie 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. Wdrożenie programu obsługi dla każdego formantu podrzędne KeyDown zdarzenia i monitor klawisz ESC.Wywołanie CancelEdit metody zapobiegające ItemValuePushed zdarzenia z podniesionych.Kod będzie przypominał następujący przykład.

    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. Wdrożenie programu obsługi dla NewItemNeeded zdarzenia.To zdarzenie jest wywoływane, gdy użytkownik dodaje nowy element, aby DataRepeater kontroli.Kod będzie przypominał poniższy przykład, który jest źródłem danych o nazwie 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. Wdrożenie programu obsługi dla ItemsRemoved zdarzenia.To zdarzenie występuje, gdy użytkownik usuwa istniejący element.Kod będzie przypominał poniższy przykład, który jest źródłem danych o nazwie 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. Dla kontroli poziomu sprawdzania poprawności, opcjonalnie zaimplementować obsługę dla Validating zdarzenia formantów podrzędnych.Kod będzie przypominał następujący przykład.

    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;
        }
    }
    

Zobacz też

Informacje

ItemValuePushed

NewItemNeeded

ItemValueNeeded

Koncepcje

Wprowadzenie do formantu DataRepeater (Visual Studio)