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 explicitamente gerenciar a interação do controle com sua fonte de dados. O DataRepeater o controle fornece vários eventos que você pode manipular para interagir com sua fonte de dados e exibir os dados conforme a necessidade em tempo de execução.
Como as Virtual funciona de modo
O cenário mais comum para o DataRepeater é ligar os controles filho do controle a ItemTemplate para um dado 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 vinculados a uma fonte de dados e os dados são passados e para trás com a 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 por 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 os manipulador do evento para criar um novo registro na fonte de dados. Para evitar alterações indesejadas, você também deve monitorar o KeyDown o 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
Arrastar um DataRepeater de controle da Visual Basic PowerPacks guia o Toolbox a um controle de formulário ou recipiente. Defina a propriedade VirtualMode como True.
Arraste os controles a partir o Toolbox até a região de modelo de item (a região superior) da DataRepeater de controle. Você precisará de um controle para cada campo na fonte de dados que você deseja exibir.
Implementar um manipulador para o ItemValueNeeded o evento para fornecer valores para cada controle. Este evento é gerado quando um novo DataRepeaterItem é rolada em modo de exibição. O código parecerá com o exemplo a seguir, que é 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; } } }
Implementar um manipulador para o ItemValuePushed o evento para armazenar 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 é 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; } }
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(); } }
Implementar um manipulador para o NewItemNeeded de evento. Este evento é gerado quando o usuário adiciona um novo item para o DataRepeater de controle. O código parecerá com o exemplo a seguir, que é 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; }
Implementar um manipulador para o ItemsRemoved de evento. Esse evento ocorre quando um usuário exclui um item existente. O código parecerá com o exemplo a seguir, que é 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); }
Para validação de nível de controle, opcionalmente Implemente manipuladores para os 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; } }