Analisi di XML su due controlli separati (WInForm)

2

Ho passato molto tempo a cercare una soluzione al mio problema con scarso successo. Sono piuttosto nuovo con .NET e vb.net quindi mi scuso se questo sembra semplice per chiunque altro. Ho avuto una prima versione di quello che sto cercando di fare e che ha funzionato bene. Fornirò XML di esempio e il codice vb.net che ho usato per renderlo. Dato che ho deciso di aggiungere un nodo aggiuntivo al file XML, non sono più sicuro su come elaborarlo.

XML originale:

<?xml version="1.0" encoding="utf-8"?>
<!--Transaction File.-->
<Transaction>
  <Items>
   <Item>
    <ItemID>1234</ItemID>
    <PriceEach>100.00</PriceEach>
    <Purchased>2</Purchased>
    <ItemTotal>200.00</ItemTotal>
   </Item>
   <Item>
    <ItemID>2345</ItemID>
     <PriceEach>2.50</PriceEach>
     <Purchased>3</Purchased>
     <ItemTotal>7.50</ItemTotal>
   </Item>
  </Items>
 </Transaction>

Codice Vb.net per popolare DataGridView con ogni voce che è la sua stessa riga.

 Dim Transaction As New DataSet
     Transaction.ReadXml(TransactionID) 'TransactionID is sent to this code
     DataGridView1.DataSource = Transaction.Tables(0)

Funziona perfettamente. Tuttavia, ho deciso che dovevo aggiungere un nuovo nodo per contenere il costo totale per la transazione specifica. Quindi il nuovo file XML è così:

<?xml version="1.0" encoding="utf-8"?>
<!--Transaction File.-->
<Transaction>
  <TransactionTotal>207.50</TransactionTotal>
  <Items>
   <Item>
    <ItemID>1234</ItemID>
    <PriceEach>100.00</PriceEach>
    <Purchased>2</Purchased>
    <ItemTotal>200.00</ItemTotal>
   </Item>
   <Item>
    <ItemID>2345</ItemID>
     <PriceEach>2.50</PriceEach>
     <Purchased>3</Purchased>
     <ItemTotal>7.50</ItemTotal>
   </Item>
  </Items>
 </Transaction>

Quindi ora ho un nuovo set di tag TransactionTotal che dovrebbe essere visualizzato come proprietà text di un'etichetta denominata TransactionTotal. TransactionTotal.Text = ?? I tag TransactionTotal si trovano allo stesso livello dei tag Articoli. E quindi DataGridView dovrebbe mostrare tutti gli articoli all'interno degli articoli come una nuova riga nel DGV.

Ovviamente questo nuovo nodo rende invalido il mio codice popolato DGV originale. Uso un'istruzione Try / Catch che non genera errori perché il file XML viene trovato e viene convalidato come XML corretto ma il mio DGV è vuoto poiché il codice viene eliminato da TransactionTotal che viene aggiunto al mix.

Apprezzo molto ogni aiuto che mi guida nel modo giusto!

    
posta WeekendRockstar 14.07.2015 - 01:32
fonte

1 risposta

1

Le mie scuse ma una musa sono arrivate e ho una risposta alla mia domanda che volevo pubblicare qui nel caso in cui aiuti qualcun altro. Tuttavia, se hai altre idee su come farlo, per favore condividi.

Codice aggiornato:

    Dim TransactionItems As New DataSet
    TransactionItems.ReadXml(TransactionID) ' still passed into this code by user selection
    DataGridView1.DataSource = TransactionItems.Tables(2)
    TransactionTotal.Text = TransactionItems.Tables(0).Rows(0).Item(0).ToString()

Onestamente nel mio codice originale non ho davvero capito la parte "Tables" del codice per inserire gli elementi nel DataGridView. Come si scopre ogni nodo veniva trasformato in una tabella separata. Ora il valore tra i tag TransactionTotal è impostato come proprietà text di un'etichetta.

    
risposta data 14.07.2015 - 06:38
fonte

Leggi altre domande sui tag