Newsgroup: it.comp.lang.visual-basic
Titolo: [.NET] Cambiare il datasource di un DataGrid

Ciao a tutti.
Se imposto il datasource di un datagrid in questo modo:
DataGrid1.SetDataBinding(dsTabella, "Tabella")
La griglia viene correttamente riempita con i record del datatable Tabella
(che ha 2 soli campi)
Se poi cancello il datatable tabelle e lo ricreo utilizzando un'altra
tabella (con 5 campi)
dsTabella.Tables("Tabella").Clear()
da.Fill(dsTabella, "Tabella")
Quando reimposto
DataGrid1.SetDataBinding(dsTabella, "Tabella")
Non vedo solo le 5 colonne della nuova tabella, ma vedo le due colonne della
prima tabella con i record a Null e le 5 nuove colonne.
Mi sapete inoltre dire che differenza c'č (se c'č) tra impostare il
collegamento ai dati con:
- DataGrid1.SetDataBinding(dsTabella, "Tabella")
oppure con :
- DataGrid1.DataSource = dsTabella.Tables("Tabella")
Grazie a tutti
Ciao
Skysurfer

 prima tabella con i record a Null e le 5 nuove colonne.
nel frattempo credo che tu abbia cambiato il selectcommand del dataadapter,
giusto?
hai anche provato a fare da.fillschema prima di effettuare il fill?
--
Salutoni
Sergio


Si, ma il risultato non cambia.
Riporto più sotto la Sub che ho scritto. Tra l'altro non capisco perchè devo
disattivare i vincoli quando ricarico una nuova tabella perchè altrimenti mi
dà questo errore: " Impossibile attivare i vincoli. Una o più righe
contengono valori che violano il vincolo non-null, unique o  foreign-key.".
Ma se prima di fare il Fill rimuovo la tabella con Clear, il dataset non
dovrebbe essere vuoto? Ho paura di non aver capito qualcosa di questo
maledetto 
ADO.NET
Ciao e grazie.
Skysurfer
Private Sub LeggiTabella(ByVal sqlTabella As String)
    sqlTabella = "SELECT * FROM " & sqlTabella
    cmd.Connection = cn
    cmd.CommandText = sqlTabella
    da.SelectCommand = cmd
    If Not dsTabella.Tables("Tabella") Is Nothing Then
        dsTabella.Tables("Tabella").Clear()
    End If
    dsTabella.EnforceConstraints = False
    da.FillSchema(dsTabella, SchemaType.Source, "Tabella")
    da.Fill(dsTabella, "Tabella")
    DataGrid1.SetDataBinding(dsTabella, "Tabella")
End Sub

 dovrebbe essere vuoto?
non credo proprio che avvenga cosě: se fai clear elimini il contenuto della
tabella, ma la sua struttura resta. quello che pensavo io, era che richiamando
il fillschema la nuova struttura sostituisse la vecchia, ma evidentemente non č
cosě, quindi credo che la soluzione sia di aggiungere un'altra tabella al
dataset (e mi sembra che sia quella piů razionale, in fondo) oppure eliminare
completamente la vecchia (credo settandola a nothing, ma non ho mai provato).
fammi sapere, perchč il discorso mi interessa alquanto.
--
Salutoni
Sergio

secondo me quel
dsTabella.Tables("Tabella").Clear()
non cancella la tabella del dataset, ma elimina tutti i record. Sta'
attento, perchč se avessi fatto un .Update del dataadapter molto
probabilmente ti saresti trovato con la tabella svuotata.....
questo discorso č avvalorato dal fatto che quando reimposti il dataset, ti
ritrovi sempre la prima tabella (con i due campi, quindi il framework
conosce ancora la struttura, a riprova del fatto che qualche riferimento c'č
ancora).....
io proverei ad agire sulla collection Tables cosě:
dsTabella.Tables.Clear
se c'č un metodo simile....cosě tu azzeri la struttura del dataset e poi la
ricarichi con le nuove tabelle che ti servono.....
good coding!!!
--
Damiani Liborio Igor
ig...@igordamiani.it
 - 
soft...@igordamiani.it
 - 
idam...@hotmail.com
http://www.igordamiani.it
ICQ : 11847262

 dsTabella.Tables.Clear
In effetti č quello che stavo provando proprio adesso, anche se avevo
utilizzato questo codice:
dsTabella.Tables.Remove("Tabella")
La tabella viene rimossa dal dataset e poi viene correttamente ricreata
quando eseguo il nuovo fill con la struttura della nuova tabella.
Il problema č che quando reimposto
DataGrid1.SetDataBinding(dsTabella, "Tabella")
la griglia non si aggiorna con i nuovi dati.
Credevo che questo DataGrid fosse bello, ma mi sto ricredendo. Tra l'altro
ho visto che non c'č ancora un metodo per fare il dimensionamento automatico
delle colonne. Mi sa che passerň ancora al TrueDBGrid, che ne dite?
Ciao
Skysurfer

Ho fatto cosě e sembra funzionare:
dsTabella.Tables.Clear()
dsTabella.EnforceConstraints = False
da.FillSchema(dsTabella, SchemaType.Source, "Tabella")
da.Fill(dsTabella, "Tabella")
If DataGrid1.TableStyles.Count <> 0 Then
    Me.DataGrid1.TableStyles.RemoveAt(0)
End If
Dim ts As New DataGridTableStyle()
Me.DataGrid1.TableStyles.Add(ts)
DataGrid1.DataSource = dsTabella.Tables("Tabella")
ts.MappingName = dsTabella.Tables("Tabella").ToString
Ciao.
Skysurfer