[Vb.Net] Aggiornare contenuto datagridview

lunedì 22 dicembre 2008 - 00.44

ertulio Profilo | Senior Member

Salve, il mio problema è questo

Ho due Form Form1 e form2
In form1 è presente un datagridview riempito con dataset e datatable, e un pulsante, che cliccato passa l'id con tutti i campi a form2 chiudendo anche form1

In form2 ci sono i text box contenente i valori del campo del datagrdview per poter apportare modifiche e un campo aggiorna, che va a fare la update dei valori del db di cui il datagridview. Alla pressione del pulsante aggiorna, dopo aver implementato la update dei campi si chiude la finestra di modifica form2 e si riapre form1.

Il mio problema è che il datagridview non aggiorna il campo updato se non dopo aver richiuso e riaperto la form. Dove sbaglio? come posso provvedere a questo problema? grazie1000




http://www.risorsefantacalcio.it

Risorse per tutti gli appassionati di fantacalcio da cui prelevare news, probabili formazioni, voti del corriere e gazzetta e tanhto altro.

Teech Profilo | Expert

Come fai a popolare i campi della form2?
--------------
Maurizio Brini
--------------
Nessuna impresa è mai stata compiuta da un uomo ragionevole

ertulio Profilo | Senior Member

i campi della form2 ossia i textbox vengono popolati attraverso una select dal db
http://www.risorsefantacalcio.it

Risorse per tutti gli appassionati di fantacalcio da cui prelevare news, probabili formazioni, voti del corriere e gazzetta e tanhto altro.

Teech Profilo | Expert

In questo modo stati gestendo separatamente gli oggetti sul form1 e sul form2 quindi per aggiornare il form1 devi rilanciare l'interrogazione sul DB quando rientri su form1.
Ricorda che ADO.NET è un ambiente disconnesso e quando aggiorni il DB non aggiorni i controlli associati perchè i controlli non sono associati al DB ma al Dataset.

Una soluzione che preferisco è passare ad un costruttore della form2 (devi crearlo tu) un oggetto e "lavorare" quello: ad esempio, puoi passare al costruttore del form2 l'oggetto associato alla DataGridViewRow selezionata:
Dim f2 As Form2 = New Form2(dgv.SelectedRows(0).DataBoundItem)

Nel form2 usi un codice di questo tipo:

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra
Ovviamente questo codice è altamente migliorabile (ad esempio utilizzando i DataBindings sui TextBox in Form2), ma per esprimere il concetto di passare un oggetto ho preferito non "complicarlo".
--------------
Maurizio Brini
--------------
Nessuna impresa è mai stata compiuta da un uomo ragionevole

ertulio Profilo | Senior Member

Scusa ma l'interrogazione del db all'apertura della form1 non avviene in automatico? In form 1 apro e chiudo la connessione, alla chiusura si passa a form2, in form2 apro e chiudo la connessione, alla chiusura si riapre form1 e l'interrogazione non dovrebbe avvenire in automatico? Come posso fare per continuare ad utilizzare il codice che già ho scritto?
http://www.risorsefantacalcio.it

Risorse per tutti gli appassionati di fantacalcio da cui prelevare news, probabili formazioni, voti del corriere e gazzetta e tanhto altro.

Teech Profilo | Expert

Secondo me non stai chiudendo la form1, o per lo meno credi di chiuderla, ma non si chiude... Puoi postare la parte di codice dove apri la form2 e chiudi la form1, eventualmente anche con il passaggio del valore dell'ID della tabella?

Però mi spieghi a quale scopo chiudere la form1 sapendo già che dovrai riaprirla? Perchè fare diverse chiamate al DB nonostante hai già i dati a disposizione? Se vuoi riutilizzare il codice che hai già scritto posso darti una mano (o almeno ci provo), ma ti consiglio di non fossilizzarti su codice che può contenere errori (ritengo sia così se stai chiedendo aiuto sul forum)...
--------------
Maurizio Brini
--------------
Nessuna impresa è mai stata compiuta da un uomo ragionevole

ertulio Profilo | Senior Member

Ciao e buon natale, questo è il codice che utilizzo in form1

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra


questo quello di form2


Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra
http://www.risorsefantacalcio.it

Risorse per tutti gli appassionati di fantacalcio da cui prelevare news, probabili formazioni, voti del corriere e gazzetta e tanhto altro.

Teech Profilo | Expert

In Form1 io farei:
Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra
In Form2 invece:
Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra
Devi però gestire l'UpdateCommand dell'OleDbDataAdapter con la logica che più preferisci... Considera che l'Update lo puoi lanciare in un'unica soluzione per tutti i campi che desideri e soprattutto puoi usare i Parameters...
http://msdn.microsoft.com/it-it/library/system.data.sqlclient.sqldataadapter.updatecommand.aspx

--------------
Maurizio Brini
--------------
Nessuna impresa è mai stata compiuta da un uomo ragionevole
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