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