Newsgroup: it.comp.lang.visual-basic
Titolo: VB.NET - Riempire una form con dei dati ... semplice vero !?!

Salve a tutti, mi trovo in un "vicolo cieco concettuale", mi spiego meglio:
la questione č molto semplice, in VB6 se avevo una form con es: 15 TextBox e
dovevo riempirli prendendo i dati da un DB, non facevo altro che creare i
TextBox in Array e creavo un ciclo piů o meno in questo modo:
stringaSQL = "SELECT Nome, Cognome, CodiceFiscale, ...FROM Soggetti WHERE
ID=1"
rst.open stringasql, cnn, 0, 1
For I=0 to ubound TextBox.UBound
    TextBox(i).text = rst(i) & ""
Next
Ora con 
VB.NET
 gli array di controllo non esistono (o esistono in parte),
comenque non si puň fare con i textbox, e quindi mi domandavo:
voi come fate?
c'č una scorciatoia concettualmente simile a quella che utilizzavo in VB6 ?
Ci sono altre soluzioni ?
tutte le idee sono gradite
grazie e ciao

 VB6 ? Ci sono altre soluzioni ?
Il data binding l'hai scartato a priori?
--
Salutoni
Sergio


No, non l'ho scartato, non conosco bene come funziona, ma se non vado errato
per poterlo utlizzare č necessario aver impostato in precedenza una sorgente
di dati (non so se un DataReader o qualcos'altro).
Ma tu utilizzi il data binding ? ti trovi bene ?

 Ma tu utilizzi il data binding ? ti trovi bene ?
Ci sto provando, più che altro.
La differenza sostanziale, rispetto al databinding di vb6, è che qui sei
costretto a lavorare in disconnesso. La cosa produce una maggiore quantità di
codice, ma ha il vantaggio che tutte le variazioni sono effettuate sulle tabelle
locali, e hai la possibilità di validare i dati tutti assieme, al momento di
inviare le modifiche al database
--
Salutoni
Sergio


Ho provato ad usare il databinding cosě
TextBox.DataBindings.Add(New Binding("Text", DS, "NomeTabella.NomeCampo"))
e funziona,
ma ora mi domando (premetto che anche in VB6 non avevo mai usato
il databinding):
le modifiche che ho apportato alla TextBox automaticamente dovrebbero
aggiornare il campo che avevo indicato (NomeCampo) ?
a me sembra di no. Che vandaggi ho allora ad usare il databinding ?
ciao e grazie

 a me sembra di no.
Direi di sì, invece. Ma come dicevo prima, quelli del DataTable, quindi quelli
copiati in locale. Per aggiornare il database di origine devi vedere il metodo
update (?) del DataAdapter, dopo aver correttamente impostato i comandi di
update, insert e delete. C'è anche un CommandBuilder che potrebbe farlo per te,
ma non ho mai provato ad usarlo.
--
Salutoni
Sergio

> Direi di sì, invece. Ma come dicevo prima, quelli del DataTable, quindi
quelli
Si infatti funziona, avevo sbagliato qualcosa evidentemente


Mi correggo, andando avanti con le prove, mi sono accorto che usando il
DataBinding su un TextBox e modificandone il contenuto il record a cui è
collegato viene modificato (lo vedo perchè facendo
msgbox(ds.tables(0).rows(0)("nomecampo") viene restituito il valore Text del
TextBox modificato), ma la proprietà DS.HasChanges restituisce sempre false,
non si accorge che sono stato effettuate delle modifiche.
Invece se scrivo ds.tables(0).rows(0)("nomecampo") ="prova" il textbox
cambia di valore in "Prova" e DS.HasChanges restituisce true
come mai ?
ciao grazie

 delle modifiche.
Forse, ma la butto lì per analogia con il datagrid, non "sente" le modifiche
perchè non ti sei ancora mosso dalla riga, e quindi considera l'edit ancora in
corso; solo che a questo punto non ho ancora scoperto come fare a forzare la
chiusura dell'edit, sostanzialmente l'equivalente del metodo update del vecchio
recordset....
Se tu lo trovi fammi un fischio :-)
--
Salutoni
Sergio

 Se tu lo trovi fammi un fischio :-)
ah.. già che ci siamo, confesso il metodo (orrendo) che sembra funzionare:
disassociare il controllo dai dati.
--
Salutoni
Sergio