none
PAGINAR DATAGRID COM LISTA DE OBJETOS APLICACAO WINDOWS.FORMS RRS feed

  • Pergunta

  • Pessoal, pesquisei em alguns fóruns e vi que para aplicações windows forms o datagridview não permite o recurso de paginação.  Vi alguns exemplos que, utilizando o objeto datatable, esta tarefa torna-se possível. Na verdade, desenvolvi meu projeto em camadas no qual os métodos retornam uma lista de objetos de acordo com cada entidade da tabela. Por exemplo, tenho uma tabela registros que possui chaves estrangeiras de outras tabelas.

    Fazendo algo conforme abaixo meu datagrid é populado (funciona perfeirtamente) conforme os dados retornados pelo método.

     Dim lista As Generic.List(Of registroVO)


                lista = cargo.getRegistros (retorna uma coleção de objetos do tipo registroVo)


                grid.DataSource = lista

    No grid, onde existe a relação pai filho a coluna aparece com o nome da minha propriedade e o conteúdo com o objeto  geralaudos.autoridadeVO (tabela registro possui chave estrangeira de autoridade).

    Gostaria de saber como converto a minha lista de objetos (algumas colunas apresentam pai/filho) para um datatable dinamicamente. Não sei se este é o melhor caminho. Na verdade, preciso apenas paginar o grid que foi exibido.

    Agradeço a ajuda.

    sexta-feira, 2 de novembro de 2012 16:45

Respostas

  • Como a tua datagridview e alimentada por uma lista, eu nao tenho a certeza se voce vai conseguir transformar ela em tabela.

    Mas o que voce pode fazer e transformar a tua lista em tabela antes de alimentar a datagridview, depois pega a tabela alimenta o teu datagridview.

    Esta e a funcao que converta a tua lista em tabela.

    Public Function ToDataTable(Of T)(items As List(Of T)) As DataTable Dim dataTable As New DataTable(GetType(T).Name) Dim Props As PropertyInfo() = GetType(T).GetProperties(BindingFlags.[Public] Or BindingFlags.Instance) For Each prop As PropertyInfo In Props dataTable.Columns.Add(prop.Name) Next For Each item As T In items Dim values = New Object(Props.Length - 1) {} For i As Integer = 0 To Props.Length - 1 values(i) = Props(i).GetValue(item, Nothing) Next dataTable.Rows.Add(values) Next Return dataTable End Function

    Depois faz assim:

    Public Function dt() As DataTable Dim convert As New Convert_Class1() Dim tabela As New DataTable() tabela = convert.ToDataTable(convert.studantes())//estudante representa a tua lista. Return tabela End Function

    depois usa o dt, datagridview.datasource = dt;


    A flower cannot blossom without sunshine, and man cannot live without love.

    sexta-feira, 2 de novembro de 2012 20:48
    Moderador

Todas as Respostas

  • Como a tua datagridview e alimentada por uma lista, eu nao tenho a certeza se voce vai conseguir transformar ela em tabela.

    Mas o que voce pode fazer e transformar a tua lista em tabela antes de alimentar a datagridview, depois pega a tabela alimenta o teu datagridview.

    Esta e a funcao que converta a tua lista em tabela.

    Public Function ToDataTable(Of T)(items As List(Of T)) As DataTable Dim dataTable As New DataTable(GetType(T).Name) Dim Props As PropertyInfo() = GetType(T).GetProperties(BindingFlags.[Public] Or BindingFlags.Instance) For Each prop As PropertyInfo In Props dataTable.Columns.Add(prop.Name) Next For Each item As T In items Dim values = New Object(Props.Length - 1) {} For i As Integer = 0 To Props.Length - 1 values(i) = Props(i).GetValue(item, Nothing) Next dataTable.Rows.Add(values) Next Return dataTable End Function

    Depois faz assim:

    Public Function dt() As DataTable Dim convert As New Convert_Class1() Dim tabela As New DataTable() tabela = convert.ToDataTable(convert.studantes())//estudante representa a tua lista. Return tabela End Function

    depois usa o dt, datagridview.datasource = dt;


    A flower cannot blossom without sunshine, and man cannot live without love.

    sexta-feira, 2 de novembro de 2012 20:48
    Moderador
  • Obrigado amigo. Era exatamente o que eu precisava. Aproveitando a sua colaboração, a paginação do datagridView em aplicações windows forms tem que ser feita via código ? Pelos tutoriais que pesquisei, parece que somente desta forma que ela funciona. Já testei um código aqui que funcionou quando o datasource do grid é um datatable. É isto mesmo ?

    De qualquer forma, agradeço muito pela resposta inicial.

    Um grande abraço.

    sexta-feira, 2 de novembro de 2012 21:50