Ordine di esecuzione per le web form e treeView

martedì 19 agosto 2003 - 10.22

primiceri Profilo | Newbie

ciao,
sto sviluppando una soluzione in cui visualizzo due webForm nel browser tramite due frame, Nel frame di sinistra ho messo un TreeView che dovrebbe mostrare la struttura di un db SQL Server, clickando poi su un nodo, il frame di destra visualizza le informazioni complete sull'oggetto selezionato. Il TreeView legge la struttura del db in un XML che deve essere generato dinamicamente. Mi trovo di fronte al seguente problema: la generazione del TreeView genera sempre un errore, perché al momento di istanziare l'oggetto non è stato ancora creato il file XML. Ho provato inserendo l'algoritmo di generazione del file nel metodo Page_Load della webForm che contoene il TreeView, ma non ho ottenuto risultati... non ho trovato nessun metodo o altro meccanismo che forza l'aggiornamento del TreeView... avevo pensato di inserire l'algoritmo di creazione del file XML mella webForm di destra, con la speranza di poter imporre l'ordine di esecuzione delle form, ma mi sono accorto che neanche questo è possibile... almeno per me, ora... chi può darmi una mano???

grazie...
Carmelo.

Brainkiller Profilo | Guru

Ciao Carmelo,
benvenuto!
Allora se non ho capito male, tu fai generare prima un file XML che prende i dati dal Database e poi la treeview dovrebbe caricare il contenuto di questo XML è corretto?

Se fosse così tagliando un passaggio puoi usare SQLXML che è un pacchetto dentro SQL Server che ti permette di interagire con il DB via XML.
Per esempio se tu fai una SELECT aggiungendo alla fine della tua query il blocco FOR XML AUTO, la query ti viene restituita in struttura XML. Prova un po', elimenersi il passaggio di creazione su disco molto noioso ed utilizzeresti una tecnologia importante di SQL Server.

Fammi sapere se hai ancora dubbi.
ciao

David De Giacomi

primiceri Profilo | Newbie

Grazie per le informazioni... sicuramente così si elimina un passaggio, purtroppo però il mio problema sta a monte della creazione dell'XML, che in un modo o nell'altro genero correttamente. Il punto sta nel fatto che, a quanto pare, se voglio descrivere il TreeView tramite XML, il file stesso deve essere già pronto e disponibile in fase di inizializzazione della form, mentre in ogni caso io ho solo il metodo Page_Load per generarlo... ecco perché avevo pensato di generare l'XML separatamente, mediante una form "di benvenuto" che dovrebbe però partire prima della form che visualizza il TreeView... il fatto che queste form siano presenti in due frame della stessa finestra di explorer, crea problemi con la sincronizzazione ed in realtà entrambe sembrano andare per conto proprio...

Grazie comunque,
CP

Brainkiller Profilo | Guru

Certamente,
i due frame sono indipendenti e vengono eseguiti in base al parsing che il client fa (Internet Explorer).
Una volta che vede che è formato da due pagine/due frame fa due richieste anche contemporanee al Web Server quindi non c'è modo di sincronizzarle che io sappia.
Per questo io ti dicevoe di sfruttare direttamente la query che restituisce XML in modo da fare il load direttamente nella treeview, non ho capito perchè non vuoi optare per questa soluzione.
Fammi sapere.
ciao

David

primiceri Profilo | Newbie

bene,
volevo solo essere sicuro che non c'era modo di sincronizzare i due frame... ho provato la tua soluzione ed anche quella alternativa di popolare il treeview utilizzando i suoi metodi nativi (perciò senza più XML)... funzionano entrambi bene, però ho notato una cosa e vorrei sapere se risponde al vero: a quanto pare i driver utilizzati da .NET per interfacciarsi coi DB (io uso SQL Server) non supportano cursori innestati... infatti, ho provato a popolare il treeview innestando tra loro i cicli di fetch delle query, seguendo il modo come gli oggetti sono presenti in banca dati, però ho dovuto, per ogni nuova select su tabella, ricorrere anche ad una connessione aggiuntiva... mi è sembrato di capire che c'è un modo per caricare in memoria il risultato della singola query in modo da liberare il dataset per la query successiva o addirittura che è possibile legarsi, tramite sqlAdapter, a più tabelle in modo da ottenere in un unico dataset tutte le informazioni di ogni livello di dettaglio... ma non ho ben capito come si usano questi oggetti... cosa mi puoi dire?

Grazie,
Carmelo.

Brainkiller Profilo | Guru

Non capisco cosa intendi come cursori innestati. Provo a capire. Nell'ADO precedente si potevano aprire due Recordset usando la stessa connessione e ciclarli contemporaneamente magari uno dentro l'altro, forse è questo che intendi.
In ADO.NET viene usato il DataReader che è una cosa simile al Recordset, ma in questo caso è possibile solo tenere aperto un DataReader per connessione.
E tu mi chiedi e allora come si fa?
E' sufficiente usare un DataAdapter fare un Fill, quindi riempirlo con tutti i dati che ci servono e poi ciclare sui dati all'interno delle Table. Lo saprai anche tu, un DataSet è un database vero e proprio che può contenere più tabelle, records, chiavi, ecc.
Riguardo alla seconda domanda, sì, si può riempire un Dataset con più tabelle usando una sola istruzione e c'è un Tip apposito che puoi vedere:
http://www.dotnethell.it/tips/tip.aspx?TipID=34

Poi per accedere alle righe delle sottotabelle del DataSet puoi usare:
ds.Tables["Nome_Tabella"].Rows
per sapere quante sono:
ds.Tables["Nome_Tabella"].Rows.Count
per accedere a un record:
ds.Tables["Nome_Tabella"].Rows[0]["nome_colonna"]

Ciao
David
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5