Newsgroup: it.comp.www.asp
Titolo: [ASP.NET] Aggiornamento database da dataset.

Salve a tutti. Ho questo codice che però non funziona al richiamo del metodo
Update dell'oggetto DataAdapter. Qualcuno può dirmi perché ?
Private cn As OleDbConnection
        Private strConn As String = "provider=Microsoft.Jet.OLEDB.4.0;Data source="
& Server.MapPath("../db/miodb.mdb")
        Private Sub Page_Load(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load
            cn = New OleDbConnection(strConn)
            da.SelectCommand.Connection = cn
            da.Fill(ds)
            DataGrid1.DataSource = ds
            DataGrid1.DataBind()
        End Sub
        'modifica record
        Private Sub DataGrid1_EditCommand(ByVal source As Object, ByVal e As
System.Web.UI.WebControls.DataGridCommandEventArgs) Handles
DataGrid1.EditCommand
            DataGrid1.EditItemIndex = e.Item.ItemIndex
            DataGrid1.DataBind()
        End Sub
        'aggiorna record nel database
        Private Sub DataGrid1_UpdateCommand(ByVal source As Object, ByVal e As
System.Web.UI.WebControls.DataGridCommandEventArgs) Handles
DataGrid1.UpdateCommand
            da.Update(ds)
            DataGrid1.EditItemIndex = -1
            DataGrid1.DataBind()
        End Sub
        'annulla operazione modifica record
        Private Sub DataGrid1_CancelCommand(ByVal source As Object, ByVal e As
System.Web.UI.WebControls.DataGridCommandEventArgs) Handles
DataGrid1.CancelCommand
            DataGrid1.EditItemIndex = -1
            DataGrid1.DataBind()
        End Sub
--------------------------------
Inviato via 
http://usenet.libero.it

 Update dell'oggetto DataAdapter. Qualcuno può dirmi perché ?
La gestione del aggiornamento del database con l'update del dataadapter
nelle webapplication presenta dei problemi, il primo tra tutti il
mantenimento dello stato del dataset. Per poter aggiornare il database da un
dataset, questo dev'essere caricato al momento della modifica, i dati devono
essere modificati e quindi dev'essere fatto l'update.
Nel tuo codice, nell'update del dataset, i dati non sono stati inseriti nel
dataset e non sono state fatte modifiche ai record necessari.
Ciao
--
AZ [Microsoft .NET MVP]

 dataset e non sono state fatte modifiche ai record necessari.
Immagina che il problema risiedesse in questo passaggio ma speravo che mi
indicassi il codice mancante o almeno qualche risorsa in rete spiegata in
modo chiaro possibilmente visto che l'msdn di visual studio è fatto un pò
maluccio. Grazie.
Stefano


 Stefano
Dunque... La prima cosa che ti consiglio è inserire il codice per il
popolamento del datagrid in una funzione apposita:
sub PopolaDG()
dim strConn As String = "provider=Microsoft.Jet.OLEDB.4.0;Data source="
& Server.MapPath("../db/miodb.mdb")
cn = New OleDbConnection(strConn)
da.SelectCommand.Connection = cn
da.Fill(ds)
DataGrid1.DataSource = ds
DataGrid1.DataBind()
End Sub
Questa funzione la richiamerai dal PageLoad dopo il controllo del postback:
sub PageLoad()
if not page.IsPostBack then
    PopolaDG()
end if
Quindi nell'evento edit-command, dopo aver impostato la linea per la
modifica richiamerai ancora quella funzione:
        Private Sub DataGrid1_EditCommand(ByVal source As Object, ByVal e As
System.Web.UI.WebControls.DataGridCommandEventArgs) Handles
DataGrid1.EditCommand
            DataGrid1.EditItemIndex = e.Item.ItemIndex
            PopolaDG() ' <- funzione!!!
        End Sub
Anche per il Cancel:
        Private Sub DataGrid1_CancelCommand(ByVal source As Object, ByVal e
As
System.Web.UI.WebControls.DataGridCommandEventArgs) Handles
DataGrid1.CancelCommand
            DataGrid1.EditItemIndex = -1
            PoplaDG()
        End Sub
Quando farai l'update dovrai seguire un altra strada. Dovrai ricaricare nel
dataset i dati dal database, modificare la riga in questione sempre nel
dataset con i dati presi dal datagrid, quindi fare l'update:
        Private Sub DataGrid1_UpdateCommand(ByVal source As Object, ByVal e
As
System.Web.UI.WebControls.DataGridCommandEventArgs) Handles
DataGrid1.UpdateCommand
dim strConn As String = "provider=Microsoft.Jet.OLEDB.4.0;Data source="
& Server.MapPath("../db/miodb.mdb")
cn = New OleDbConnection(strConn)
da.SelectCommand.Connection = cn
da.Fill(ds)
' Qui modifico i dati per quella riga:
' Devi modificare il datatable presente nel dataset con i dati presi dal
datagrid;
' Di seguito c'è solo un esempio, ma dipende tutto da come visualizzi in
modalità
' edit il tuo datagrid.
da.Tables("nometuatabella").Rows[e.Item.ItemIndex]["nomecolonna"]=DataGrid1.
Item[e.item.itemIndex].Cells[0].Text
'
            da.Update(ds)
            DataGrid1.EditItemIndex = -1
            DataGrid1.DataBind()
        End Sub
Il codice qui sopra può essere un buon punto di partenza.


....

Ok Andrea è tutto chiaro tranne che una parte: la riga dove si variabilizza
la cella ha un errore perché si usa ds (dataset) al posto di da
(datadapter):
ds.Tables("miatabella").Rows(e.Item.ItemIndex)("nomecolonna") =
DataGrid1.Items(e.Item.ItemIndex).Cells(0).Text
Io però non devo preoccuparmi di inserire un nome specifico di campo: come
faccio ad inviare tutto il record ? Escludo semplicemente il nome colonna ed
il datadapter riconosce automaticamente le modifiche senza che gli indico
esattamente le celle visto che dispongo di una quindicina di campi per riga
?


 ?
No. Il dataadapter non è in grado di capire quali dati sono stati modificati
nel datagrid, ma è solo in grado di capire i dati che sono stati modificati
(grazie al diffgrams se non ricordo male).
Nel tuo codice devi prendere i dati inseriti dall'utente nel datagrid in
modalità edit, inserirli nel dataset, quindi richiamare il metodo update del
dataadapter che, visionate le modifiche apportate al dataset, inserirà tale
modifiche nel database.
Se non ho preso un url sbagliato (sorry!), guarda questo documento per
sapere come prendere le modifiche inserite dall'utente nel datagrid:
http://samples.gotdotnet.com/quickstart/aspplus/doc/webdataaccess.aspx


 AZ [Microsoft .NET MVP]
Grazie mille. E' piů che esauriente !!
