Modo virtual no controle DataRepeater (Visual Studio)

Quando você deseja exibir grandes quantidades de dados tabulares em um DataRepeater controle, você pode melhorar o desempenho, definindo a VirtualMode propriedade para True e gerenciar explicitamente a interação do controle com sua fonte de dados.O DataRepeater controle fornece vários eventos que você pode manipular para interagir com sua fonte de dados e exibir os dados conforme necessário em tempo de execução.

Como as Virtual funciona de modo

A situação mais comum para o DataRepeater controle está a ligar os controles filho do ItemTemplate em um de dados em tempo de design de fonte e permitir que o BindingSource para passar dados e para trás conforme necessário.Quando você usa o modo virtual, os controles não estão ligados a uma fonte de dados e dados está indo e voltando à fonte de dados subjacente, em tempo de execução.

Quando o VirtualMode propriedade estiver definida como True, você criar a interface do usuário adicionando controles a partir do Toolbox em vez de adicionar controles de limite da Fontes de dados janela.

Eventos são gerados em uma base de controle, o controle, e você deve adicionar código para manipular a exibição de dados.Quando um novo DataRepeaterItem é colocada na exibição, o ItemValueNeeded evento é gerado uma vez para cada controle e você deve fornecer os valores para cada controle no ItemValueNeeded manipulador de eventos.

Se os dados em um dos controles são alterados pelo usuário, o ItemValuePushed evento é gerado e você deve validar os dados e salvá-lo em sua fonte de dados.

Se o usuário adiciona um novo item, o NewItemNeeded evento é gerado.Use o manipulador deste evento para criar um novo registro na fonte de dados.Para evitar alterações indesejadas, você também deve monitorar o KeyDown evento para cada controle e a chamada CancelEdit se o usuário pressionar a tecla ESC.

Se as alterações de fonte de dados, você poderá atualizar o DataRepeater controle chamando o BeginResetTemplateItem e EndResetTemplateItem métodos.Ambos os métodos devem ser chamados na ordem.

Finalmente, você deve implementar manipuladores de eventos para o ItemsRemoved evento, que ocorre quando um item é excluído e, opcionalmente, para o UserDeletingItems e UserDeletedItems eventos, que ocorrem sempre que um usuário exclui um item pressionando a tecla DELETE.

Implementando o modo Virtual

A seguir estão as etapas necessárias para implementar o modo virtual.

Para implementar o modo virtual

  1. Arrastar um DataRepeater controlar da Visual Basic PowerPacks guia o caixa de ferramentas a um controle de formulário ou recipiente.Defina a propriedade VirtualMode como True.

  2. Arraste os controles a partir o caixa de ferramentas até a região de modelo de item (a região superior) do DataRepeater controle.Você precisará de um controle para cada campo na fonte de dados que você deseja exibir.

  3. Implementar um manipulador para o ItemValueNeeded evento para fornecer valores para cada controle.Este evento é gerado quando um novo DataRepeaterItem é colocada na exibição.O código parecerá com o exemplo a seguir, que é para uma fonte de dados denominada 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. Implementar um manipulador para o ItemValuePushed evento para armazenar os dados.Este evento é gerado quando o usuário confirma as alterações para um controle filho de DataRepeaterItem.O código parecerá com o exemplo a seguir, que é para uma fonte de dados denominada 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. Implementar um manipulador para do cada controle filho KeyDown de eventos e monitor a tecla ESC.Chamar o CancelEdit método para impedir que o ItemValuePushed o evento de disparo.O código parecerá com o exemplo a seguir.

    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. Implementar um manipulador para o NewItemNeeded evento.Este evento é gerado quando o usuário adiciona um novo item para o DataRepeater controle.O código parecerá com o exemplo a seguir, que é para uma fonte de dados denominada 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. Implementar um manipulador para o ItemsRemoved evento.Esse evento ocorre quando um usuário exclui um item existente.O código parecerá com o exemplo a seguir, que é para uma fonte de dados denominada 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. Para validação de nível de controle, opcionalmente implemente manipuladores para o Validating eventos dos controles filho.O código parecerá com o exemplo a seguir.

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

Consulte também

Referência

ItemValuePushed

NewItemNeeded

ItemValueNeeded

Conceitos

Introdução ao controle DataRepeater (Visual Studio)