Sdílet prostřednictvím


Virtuální režim ovládacího prvku DataRepeater (Visual Studio)

Chcete-li zobrazit velké množství tabulkových data v ovládacím prvku DataRepeater, můžete zlepšit výkon nastavení vlastnosti VirtualMode na True a explicitně ovládat interakci ovládacího prvku s jeho zdrojovými daty. Ovládací prvek DataRepeater poskytuje několik událostí, které lze zpracovávat k ovládání práce s vašimi zdrojovými daty a k zobrazení dat v požadovaném tvaru za běhu.

Jak funguje virtuální režim

Nejběžnější scénář pro ovládací prvek DataRepeater je svázat podřízený ovládací prvky ItemTemplate s zdrojovými daty v době návrhu a povolit BindingSource předávaní dat tam a zpět podle potřeby. Použijete-li virtuální režim, ovládací prvky nejsou vázány na zdrojové data ale data jsou předávány tam a zpět ze základního zdroje dat za běhu.

Pokud je vlastnost VirtualMode nastavena na hodnotu True, vytvoříte uživatelské rozhraní přidáním ovládacích prvků z Panelu nástrojů namísto přidání vázaného ovládací prvku z okna Zdroje data.

Události jsou vyvolány na základě jednotlivých ovládacích prvků a vy musíte přidat kód pro zpracování dat. Když je nový prvek DataRepeaterItem přesunut do oblasti zobrazení, je aktivována událost ItemValueNeeded jednou pro každý ovládací prvek a je nutné předává hodnoty pro každý prvek v obslužné rutině události ItemValueNeeded.

Pokud dojde ke změně dat v jednom nebo více ovládacích prvcích uživatele, je vyvolána událost ItemValuePushed a je nutné ověřit data a uložit jej do zdroje dat.

Pokud uživatel přidá novou položka je vyvolána událost NewItemNeeded. Použijte tu obslužnou rutiny k vytvoření nového záznam ve vašem datovém zdroji. Chcete-li zabránit neúmyslným změnám, musíte také monitorovat událost KeyDown pro každý ovládací prvek a volat CancelEdit pokud uživatel stiskne klávesa Esc.

Pokud dojde ke změně ve vašem zdroji dat, můžete aktualizovat ovládací prvek DataRepeater zavoláním metod BeginResetTemplateItem() a EndResetTemplateItem(). Obě metody musí být volány ve správném pořadí.

Nakonec musíte implementovat obslužné rutiny pro událost ItemsRemoved, ke které dojde při odstranění položka a volitelně pro události UserDeletingItems a UserDeletedItems, ke kterým dochází pokaždé, když uživatel odstraní položku stisknutím klávesy Odstranit.

Implementace virtuálního režimu

Následující kroky jsou nutné k implementaci virtuálního režimu.

Jak implementovat virtuální režim

  1. Přetáhněte ovládací prvek DataRepeater z PowerPacks jazyka Visual Basic na kartu Panel nástrojů na formulář nebo na ovládací prvek kontejner. Nastavte vlastnost VirtualMode na True.

  2. Přetáhněte ovládací prvek z Panel nástrojů na hodní oblast šablony položky ovládacího prvku DataRepeater. Budete potřebovat jeden ovládací prvek pro každé pole ve vaší zdrojových datech, které chcete zobrazit.

  3. Implementujte obslužnou rutinu pro událost ItemValueNeeded, která poskytne hodnoty pro každý ovládací prvek. Tato událost je vyvolána, když je nový DataRepeaterItem přesunut do zobrazovací oblasti. Váš kód bude vypadat podobně jako následující příkladu jehož zdroj dat má název 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. Implementujte obslužnou rutinu pro událost ItemValuePushed, která bude ukládat data . Tato událost je vyvolána, když uživatel potvrdí změny na podřízeném ovládací prvku DataRepeaterItem. Váš kód bude vypadat podobně jako v následujícím příkladu jehož zdroj dat má název 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. Implementujte obslužné rutiny pro událost KeyDown každého podřízeného ovládací prvku a sledujte klávesu Esc. Volejte metodu CancelEdit k zabránění vyvolání události ItemValuePushed. Váš kód se bude podobat následujícímu příkladu kódu.

    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. Implementujte obslužnou rutinu pro událost NewItemNeeded. Tato událost je vyvolána, když uživatel přidá novou položka do ovládacího prvku DataRepeater. Váš kód bude vypadat podobně jako kód v následující příkladu jehož zdroj dat má název 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. Implementujte obslužnou rutinu pro událost ItemsRemoved. K této událost dojde, když uživatel odstraní existující položku. Váš kód bude vypadat podobně jako kód v následujícím příkladu jehož zdroj dat má název 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. Pro ověřování podle úrovni, implementujte obslužnou rutinu pro událost Validating všech podřízených ovládacích prvků. Váš kód se bude podobat následujícímu příkladu kódu.

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

Viz také

Odkaz

ItemValuePushed

NewItemNeeded

ItemValueNeeded

Koncepty

Úvod k ovládacímu prvku DataRepeater (Visual Studio)