none
Listar Xml no grid RRS feed

  • Pergunta

  • Bom dia Pessoal,

    Estou com dificuldades para listar xml da forma que preciso, é o seguinte tenho este xml:

    printXML

    Como vocês podem ver tenho 3 ramificações:
    OutrasDespesas - despesa - e identicadorDespesas, pois bem.

    No meu codigo abaixo eu consigo lista-las apenas individualmente:

     Dim ds As New DataSet
     ds.ReadXml(txtarquivoxml.Text)
    DataGridView1.DataSource = ds.Tables("outrasDespesas")

    - pelo codigo acima ele me retorna somente o valor desta tag: <ans:totalGeralOutrasDespesas>760.88</ans:totalGeralOutrasDespesas>

    Dim ds As New DataSet
     ds.ReadXml(txtarquivoxml.Text)
    DataGridView1.DataSource = ds.Tables("despesa")

    - pelo codigo acima ele me retorna somente o valor desta tag:

    <ans:tipoDespesa>1</ans:tipoDespesa><ans:dataRealizacao>2013-11-13</ans:dataRealizacao><ans:horaInicial>10:07:00</ans:horaInicial><ans:horaFinal>10:07:00</ans:horaFinal><ans:quantidade>1.0000</ans:quantidade><ans:valorUnitario>13.21</ans:valorUnitario><ans:valorTotal>13.21</ans:valorTotal>

    Dim ds As New DataSet
     ds.ReadXml(txtarquivoxml.Text)
    DataGridView1.DataSource = ds.Tables("identificadorDespesa")

    - pelo codigo acima ele me retorna somente o valor desta tag:

    <ans:codigo>80061400</ans:codigo><ans:tipoTabela>00</ans:tipoTabela><ans:descricao>OXIGENIO</ans:descricao>

    PERGUNTO: COMO FAÇO PARA LISTA TODOS ESTAS RAMIFICAÇÕES JUNTAS? SENDO QUE A 2ª E A 3ª FAZEM PARTE DA 1ª????

    ALGUEM TEM ALGUMA SOLUÇÃO????

    Obrigado!

    quinta-feira, 23 de janeiro de 2014 12:33

Respostas

  • Ok Olavo, eu não tenho uma resposta para você no momento que seja definitiva, mas posso já esclarecer uma coias - porque ele traz de pedaço em pedaço.

    A propriedade "DataSource" de qualquer componente realmente, trabalha recebendo um componente enumerável (você poderia, por exemplo até associar o "ds" diretamente, sem chamar uma "Tables(XX)" em expecífico) e preenchendo os itens da própria classe no formato que eles tem.

    Quando você chama "ReadXml" do "DataSet" o que ele faz é ler as tags do XML e transformando todas em tabelas - pois o DataSet guarda várias tabelas - mas o DataGridView só exibe uma delas, não todas.

    O DataGridView é como um ListView, e tem para cada uma de suas "linhas" um ListViewItem, este item tem Texto e SubItens que são ListViewSubItem... Assim sendo, quando ele recebe uma tabela ele cria um LIstViewItem com Texto igual ao valor da primeira coluna e SubItens para cada uma das outras utilizando seus valores como Textos.

    Talvez você tenha que escrever uma rotina que leia o XML usando a classe "System.Xml.XmlDocument" e seus nós para transformar esse registro, porque pelo que entendi, o "<ans:TotalGeralOutrasDespesas>" é uma tag que você não vai nem exibir no seu DataGrid correto? Você quer exibir uma linha para cada tag "<ans:Despesa>" dentro de "<ans:OutrasDespesas>" certo? Se for, o que você espera que aconteça com as tags que estão dentro de "<ans:IdentificadorDespesa>"?

    Uma vez que a sua rotina esteja pronta, ela tera que pegar um String (que é o texto do XML), carregar em um XMLDocument, fazer um for each em cada nó do tipo "Despesa" e adicionar uma linha a uma DataTable com os valores InnerText dos nós internos da "Despesa" - essa DataTable você passa como argumento para o "DataSource" do DataGrid.

    Espero ter ajudado, aguardo mais informações suas para entender melhor seu problema...
    Enquanto isso vou procurar mais informações que ajudem, assim quando responder novamente terei como mostra um código...

    • Marcado como Resposta Giovani Cr quinta-feira, 30 de janeiro de 2014 16:32
    sexta-feira, 24 de janeiro de 2014 00:56

Todas as Respostas

  • Ok Olavo, eu não tenho uma resposta para você no momento que seja definitiva, mas posso já esclarecer uma coias - porque ele traz de pedaço em pedaço.

    A propriedade "DataSource" de qualquer componente realmente, trabalha recebendo um componente enumerável (você poderia, por exemplo até associar o "ds" diretamente, sem chamar uma "Tables(XX)" em expecífico) e preenchendo os itens da própria classe no formato que eles tem.

    Quando você chama "ReadXml" do "DataSet" o que ele faz é ler as tags do XML e transformando todas em tabelas - pois o DataSet guarda várias tabelas - mas o DataGridView só exibe uma delas, não todas.

    O DataGridView é como um ListView, e tem para cada uma de suas "linhas" um ListViewItem, este item tem Texto e SubItens que são ListViewSubItem... Assim sendo, quando ele recebe uma tabela ele cria um LIstViewItem com Texto igual ao valor da primeira coluna e SubItens para cada uma das outras utilizando seus valores como Textos.

    Talvez você tenha que escrever uma rotina que leia o XML usando a classe "System.Xml.XmlDocument" e seus nós para transformar esse registro, porque pelo que entendi, o "<ans:TotalGeralOutrasDespesas>" é uma tag que você não vai nem exibir no seu DataGrid correto? Você quer exibir uma linha para cada tag "<ans:Despesa>" dentro de "<ans:OutrasDespesas>" certo? Se for, o que você espera que aconteça com as tags que estão dentro de "<ans:IdentificadorDespesa>"?

    Uma vez que a sua rotina esteja pronta, ela tera que pegar um String (que é o texto do XML), carregar em um XMLDocument, fazer um for each em cada nó do tipo "Despesa" e adicionar uma linha a uma DataTable com os valores InnerText dos nós internos da "Despesa" - essa DataTable você passa como argumento para o "DataSource" do DataGrid.

    Espero ter ajudado, aguardo mais informações suas para entender melhor seu problema...
    Enquanto isso vou procurar mais informações que ajudem, assim quando responder novamente terei como mostra um código...

    • Marcado como Resposta Giovani Cr quinta-feira, 30 de janeiro de 2014 16:32
    sexta-feira, 24 de janeiro de 2014 00:56
  • Era legal se mandar o arquivo? poste num local todo o arquivo!!!

    Fulvio Cezar Canducci Dias

    sexta-feira, 24 de janeiro de 2014 15:14