Compartilhar via


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 o VirtualMode propriedade para True e gerenciamento interação do controle de com sua fonte de dados explicitamente. The DataRepeater controle fornece vários eventos que você pode manipular para interagir com sua fonte de dados e exibir sistema autônomo dados conforme necessário em time de execução.

Como virtual funciona de modo

O cenário mais comum para o DataRepeater o controle é BIND sistema autônomo controles filho da ItemTemplate em um de dados em time 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 são limite para um dado de origem e dados é passado e para trás a fonte de dados subjacente em time de execução.

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

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

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

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

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 ocorrem sempre que um usuário exclui um item, pressione a tecla excluir.

Implementando o modo virtual

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

Para implementar o modo virtual

  1. arrastar um DataRepeater controlar a partir do Visual Basic PowerPacks guia o Caixa de ferramentas para um controle de formulário ou contêiner.Defina a propriedade VirtualMode como True.

  2. arrastar os controles do Caixa de ferramentas para a área 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 é ocasionado quando o usuário confirma as alterações a um controle filho do 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 KeyDown evento e monitorar a tecla ESC. Chamar o CancelEdit método para impedir que o ItemValuePushed evento de que está sendo gerado. 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 é ocasionado quando o usuário adiciona um novo item à DataRepeater controle. O código parecerá com o exemplo a seguir, que é para uma fonte de dados denominada Employees.

    Private Sub DataRepeater1_NewItemNeeded(ByVal sender As Object, _
     ByVal e As System.EventArgs) 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 em nível de controle, opcionalmente Implemente manipuladores para o Validating eventos de 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

Conceitos

Introdução ao controle DataRepeater (Visual Studio)

Referência

ItemValuePushed

NewItemNeeded

ItemValueNeeded

Date

History

Motivo

Julho de 2008

Tópico adicional.

Alteração de recurso do SP1.