Usuário com melhor resposta
Listar Xml no grid

Pergunta
-
Bom dia Pessoal,
Estou com dificuldades para listar xml da forma que preciso, é o seguinte tenho este xml:
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!
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
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
-