my.ASPItalia.com
ASP.NET
|
HTML5
|
LINQ e Entity Framework
|
Silverlight
|
Windows Phone
|
.NET Framework
|
Windows 8
|
Libro WP7
|
Libro HTML5
|
Corso HTML5
Iscriviti
Login
Newsletter
Home
Articoli
Script
Notizie
FORUM
Blogs
Media
Tutorials
Corsi
Libri
Eventi
Tags
Tutti i forum
Ricerca
FAQ
Fai una domanda
recuperare il datasource dal datagrid/detailview/formview post modicica
in
.NET Framework
>
ASP.NET 2.0
Ultimo messaggio
baumanto
il 15 aprile 2009 alle 00:18
28 messaggi
dal 31 maggio 2007
ciao vi presento il mio caso, forse banale ma che mi fa impazzire!
Ora sappiamo tutti quanto sia facile visualizzare dati nei datagrid/detailview/formview dando in pasto come datasource una qualsiasi fonte di interfaccia Collection ad esempio un bel datatable.
Il problema è il seguente; ho un bel formview generato dal datatable, l'utente modifica i dati on line... ma come faccio ad avere i dati modificati sempre come datatable?
se metto un bel tasto e all'evento click riesco a recuperare il datasource e anche a castarlo a datatable correttamente, peccato che i dati siano quelli originali e non quelli modificati.
Alcuni propongono soluzioni d'urto tipo scorrere tutte le righe dell' oggetto datagrid/detailview/formview... non essite un modo piu facile?
vi allego il mio esempio
SqlConnection nwindConn = new SqlConnection(ConfigurationManager.ConnectionStrings["NORTHWINDConnectionString"].ConnectionString);
custDA = new SqlDataAdapter("SELECT * FROM Customers", nwindConn);
custCB = new SqlCommandBuilder(custDA);
//nwindConn.Open();
custDS = new DataSet();
custDS.AcceptChanges();
//creo i comandi x le operazioni di aggiornamento
custDA.UpdateCommand = custCB.GetUpdateCommand();
custDA.InsertCommand = custCB.GetInsertCommand();
custDA.DeleteCommand = custCB.GetDeleteCommand();
custDA.Fill(custDS, "Customers");
DetailsView1.DataSource = custDS.Tables["Customers"];
DetailsView1.DefaultMode = DetailsViewMode.Edit;
DetailsView1.AutoGenerateRows = true;
DetailsView1.AutoGenerateDeleteButton = true;
DetailsView1.AutoGenerateInsertButton = true;
DetailsView1.AutoGenerateEditButton = true;
a questo punto il mio detailview è bello in modalità modifica e con i suoi bei bottoni insert/update/delete, solo che se clicco su questi nn succede niente, cosa manca?
Ho provato a aggiungere io un tasto, e a recuperate il datatale ,ma è sempre quello originale x cui i dati vengono salvati si, ma sono vecchi per cui le modifiche perse :(
protected void Button1_Click(object sender, EventArgs e)
{
DataTable a = (DataTable)DetailsView1.DataSource;
string l = a.Rows[0]["nome"].ToString();
custDA.AcceptChangesDuringUpdate = true;
custDA.Update(a);
DetailsView1.DataBind();
}
help :)
Rispondi
Quoting
nostromo
il 15 aprile 2009 alle 09:55
14.775 messaggi
dal 18 febbraio 2004
Contributi
www.soluzioni4d.it
|
Blog
è il DataSource originale perche probabilmente associ la fonte dati al FormView ad ogni caricamento.
deto questo, anche associandola al primo Postback non risolveresti il problema, e la "terapia" che ti hanno proposto è la via giusta se non vuoi utilizzare un ObjectDataSource o un SqlDataSource
ciao marco
Chi parla senza modestia troverà difficile rendere buone le proprie parole.
Confucio
http://nostromo.spaces.live.com/default.aspx
Rispondi
Quoting
pietro09
il 15 aprile 2009 alle 10:36
2.859 messaggi
dal 28 gennaio 2003
Io ho un vecchissimo esempio, che fa uso di un DataGrid, caricato da un DataSet.
E' un esempio a solo scopo didattico, difficilmente applicabile in realtà.
A grandi linee:
creo una variabile di istanza, privata:
Private ds As New DataSet()
Nell'evento load riempio il dataset la prima volta; le altre la recupero dalla session.
evento load
{
se non postback allora
{ riempio il dataset da database; lo salvo nella session; dataBind }
altrimenti
{ recupero il dataset dalla session}
}
procedura dataBind
{è la classica procedura per visualizzare i dati nella griglia, da un dataset}
L'evento UpdateCommand si verifica quando, in modalità edit, premo il tasto Update
Evento DataGrid1_UpdateCommand
{
'ricavo un riferimento alla riga da modificare, per esempio
Dim dgi As DataGridItem = Me.DataGrid1.Items(e.Item.ItemIndex)
'ricavo il datarow che corrisponde alla chiave, per esempio
Dim dr As DataRow = GetDataRow(Me.DataGrid1.DataKeys(e.Item.ItemIndex).ToString)
'aggiorno le colonne del datarow, per esempio
dr("title") = DirectCast(dgi.Cells(1).Controls(1), TextBox).Text
'alla fine, non sono più in modalità edit
Me.DataGrid1.EditItemIndex = -1
'e rileggo i dati
BindDataGrid()
}
Il dataset contiene i dati modificati dall'utente. In seguito bisognerà immettere le modifiche nel Database.
A parte lo pseudocodice, la logica credo che sia quella.
Pietro
Rispondi
Quoting
baumanto
il 15 aprile 2009 alle 14:24
28 messaggi
dal 31 maggio 2007
A me va benissimo usare ObjectDataSource solo che nei classici esempi che si trovano in letteratura ObjectDataSource usa i metodi del DataAdapter per leggere i dati (select) e poi salvarli (inset/update/delete), non legge e non aggiorna un oggetto. Il problema sta che è difficile impostare una logica di Business BLL.
Lo scopo è solo quello di fare il "giro" che la buona ingegneria del software ci insegna ossia.
1) creo un oggetto ad esempio dtUtenti usando il metodo select del DataAdapter
2) creo un gridview con datasource il dtUtenti.
3) l'utente modifica i dati
4) recupero il dtUtenti
5) applico logiche di valutazione formale e business BLL
6) salvo l'ogetto attraverso i metodi del DataAdapter
ecco questo è quello che voglio fare, ci posso riuscire con un ObjectDataSource?
Ho cercato in giro ma nessuno usa questa politica
Secondo l'impostazione Microsoft le logiche di business sarebbero delegate a delle castomizzazioni dei metodi del DataAdapter, cosa che mi costringe a non essere astratto nei dati.
Grazie
Rispondi
Quoting
nostromo
il 15 aprile 2009 alle 15:06
14.775 messaggi
dal 18 febbraio 2004
Contributi
www.soluzioni4d.it
|
Blog
come suggerisce il nome "ObjectDataSource " questo controllo nasce apposta per lavorare con gli oggetti, se dai un occhiata a questo articolo:
http://www.aspitalia.com/articoli/asp.net2/DataSource-p-2.aspx#title_2
ne avrai una rapida panoramica delle funzionalità.
puoi crearti una tua classe custom, con i metodi di inserimento, modifica ed eliminazione e utilizzare quella
ciao marco
Chi parla senza modestia troverà difficile rendere buone le proprie parole.
Confucio
http://nostromo.spaces.live.com/default.aspx
Rispondi
Quoting
Salto rapido
Ultimi messaggi
Tutti i forum
Ricerca
Utenti online
ASP.NET
ASP.NET 2.0
ASP.NET 3.5
ASP.NET 4.0
.NET Framework
Silverlight
Windows Phone
Windows Presentation Foundation e WinForms
Windows Communication e Workflow
ASP - avanzato
ASP - base
SQL Server e MySQL
E-commerce
Hosting
Altri linguaggi e tecnologie
Windows Server, IIS & Security
Libri
OT
Commenti: blogs e notizie
Eventi
Torna al forum
| Feed
RSS
ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.
Community
Effettua il login!
Hai dimenticato la password?
Ultimi messaggi
da php a classic asp
(3)
twain image scanner in sito web
(12)
Problema con script #401 per il ridimensioanmento di immagini
(4)
sessioni asp.net 2.0
(7)
Come intercettare errori dal server e mostrarli in una pagina personalizzata?
(3)
sharepoint
Problema visualizzazione pagine
(1)
UTENTI ONLINE
In primo piano
Annunciate le versioni ufficiali di Visual Studio 11
Rilasciato Visual Studio 11 Beta: scopri tutte le novità!
Windows 8 Consumer Preview: segui con noi la diretta
I più letti di oggi
Le novità di ASP.NET 4.5 (Community Days 2012)
Introduzione ad Entity Framework
Web Camp - ASP.NET MVC 3 (Community Days 2012)
PhoneGap: gestire l'orientamento in Windows Phone
Tutorial ASP.NET MVC
Rilasciata la RTM di SQL Server 2012, la versione Express subito in download
Evitare submit doppi della web form
Incrementare le performance di ASP.NET rimuovendo gli HttpModule non necessari
C# 4
Media
Sviluppare applicazioni web mobile con HTML5 e jQuery mobile
Metro Style App per Windows 8 con HTML e Javascript
Tutti i media
In evidenza
Dal 29 febbraio arriva WinRTItalia.com: tutto sullo sviluppo per Windows 8 e Metro
Aprire una popup in Silverlight
Sviluppare applicazioni web mobile con HTML5 e jQuery mobile
Disegnare un'applicazione a servizi con Entity Framework e WCF
Il nuovo tag time in HTML5
Salvare e leggere rapidamente le impostazioni di un'applicazione Windows Phone
Metro Style App per Windows 8 con HTML e Javascript
Aggiungere un handler globale per le chiamate AJAX di ASP.NET MVC
MISC
I nostri autori
Collabora con noi!
Media Kit - Pubblicità sul nostro network