StrataFrame Forum

Atualização dos dados com ListView.

http://forum.strataframe.net/Topic14556.aspx

By Valdair Ziegler - 2/26/2008

Olá pessoal..

Tenho um form com uma ListView e alguns TextBox ligados ao BO que uso para manutenção dos dados. Para inserir os dados, sem problemas, mas como faço para que o usuário possa alterar os dados clicando na ListView.

Ex: Quando o usuário clicar num registro qualquer disponível na ListView como faço para que os dados referentes a esse registro sejam mostrados nos TextBox´s. Assim o usuário poderá estar alterando direto, sem a necessidade de navegar em outros controles.

Exclamation

By Ivan George Borges - 2/26/2008

Olá Valdair.

O controle ListView possue alguns eventos interessantes, um deles é o SelectedIndexChanged. Quando o usuário clickar em outra linha no seu ListView, este evento será chamado, e você pode colocar código nele e fazer qualquer tratamento que seja necessário, como um refresh dos seus outros controles.

Dê uma olhada nos Samples, lá você vai encontrar uma solução chamada SampleListViewPopulation, qu popula um outro ListView dependendo da linha em que o usuário clicka.

Espero que te ajude.

By Valdair Ziegler - 2/27/2008

Ok Ivan. Eu já havia verificado esse exemplo mas o que preciso fazer é um pouco diferente.

Na tela acima tenho os campos para manutenção dos dados e o listView para visualização. O listView está ligado ao BO asssim como os campos.

Para popular o ListView uso o método "meuBO.CopyDataFrom(MicroFour.StrataFrame.Business.BusinessLayerBase,MicroFour.StrataFrame.Business.BusinessCloneDataType)".

ListPopulating(MicroFour.StrataFrame.UI.ListPopulatingEventArgs e){

e.Parameters[0].Value = MeuBO;

e.Parameters[1].Value = MicroFour.StrataFrame.Business.BusinessCloneDataType.ClearAndFillFromCompleteTable;

}

Como faço para que os campos sejam atualizados com os dados do registro selecionado na ListView para que o usuário possa alterar ou excluir os dados da linha selecionada?

Abraços.

By Ivan George Borges - 2/27/2008

Vamos usar o SelectedIndexChanged do ListView para atualizar seus campos.

Você provavelmente saiba como chegar nele, mas só para deixar documentado. Selecione seu ListView, na janela de propriedades, click no "raiozinho" na toolbar. Encontre o evento SelectedIndexChanged e dê um duplo click nele. Aí, codifique algo como o exemplo abaixo:

    Private Sub MeuListView_SelectedIndexChanged(ByVal sender As System.Object, _
                                                 ByVal e As System.EventArgs) _
                                                 Handles MeuListView.SelectedIndexChanged

        '-- Verifica se há alguma linha selecionada

        If Me.MeuListView.SelectedItems.Count = 0 Then
            Exit Sub
        End If

        '-- Já que o membro (tag) para cada row é a primary key (set a primary key
        'de sua tabela), nós podemos usar este valor para navegar diretamente o
        'nosso BO.  Esta Tag foi setada no PopulationDataSourceSettings do ListView

        Me.MeuBO1.NavigateToPrimaryKey(CType(Me.MeuListView.SelectedItems(0).Tag, Integer))

    End Sub

Quando usamos o NavigateToPrimaryKey, ele navega até a row do seu business object e faz um refresh de todos bound controls do seu form.

Deu para pegar a idéia? Se não, dá um toque e tentamos de novo.