[VB.NET] - DatagridView ed eliminazione record

lunedì 19 novembre 2007 - 14.02

ciri Profilo | Newbie

Salve,

io ho un DataGridView che popolo tramite un DataSet che prende i dati da un Database.

Vorrei che quando elimino un record dal DataGridView, mi andasse ad eliminare il record nel database.

Quindi, come faccio a dire al programma che, quando si cancella un record dal DGV debba farmi una query al database ed eliminare quel record?

Grazie.

SSUPERPIPPO Profilo | Guru

Devi utilizzare il metodo Update del DataAdapter che hai utilizzato per popolare il DataSet.

Se vuoi dai un'occhiata sul mio blog (link qui sotto) all'articolo che riguarda la gestione degli accessi al database, potrebbe esserti di ispirazione.

Ciao

Alessandro


http://blogs.dotnethell.it/alebadalin

ciri Profilo | Newbie

Ma con Update non si aggiorna solamente il dataset?

E per aggiornare il database?

Scusa, ma è questo passaggio che non capisco

Grazie ancora.

SSUPERPIPPO Profilo | Guru

Allora funziona così:

- Crei un DataSet popolandolo con l'oggetto DataAdapter; in questo modo crei una copia lato client del tuo database
- Ora tutte le operazioni di inserimento, aggiornamento ed eliminazione che effettuerai sul dataset non si ripercuoteranno nel database fisico fino a quando non richiamerai il metodo Update del DataAdapter.

Attenzione! Devi impostare InsertCommand, DeleteCommand e UpdateCommand del DataAdapter, o passandogli i comandi personalizzati oppure generandoli automaticamente con l'oggetto Commandbuilder.

Se ti guardi come ti ho già consigliato la classe pubblicata sul mio blog dovrebbe esserti tutto più chiaro.

Ciao

Alessandro

http://blogs.dotnethell.it/alebadalin

ciri Profilo | Newbie

Nella tua classe, ho visto che per creare i comandi, utilizzi OleDbCommandBuilder

Io utilizzo MySQL e non riesco a trovare MySQLCommandBuilder (non c'è nulla che si riferisce a questo metodo)

Per crearlo a mano, come faccio?

Dovrebbe essere una cosa del genere, se ho capito bene:

adapter.updatecommand = New MySQLCommand("UPDATE ..... qui non so cosa mettere", conn)

Il problema che non so cosa mettere come stringa SQL per l'aggiornamento. Che ne so io quali record deve aggiornare?

Grazie.

SSUPERPIPPO Profilo | Guru

>Nella tua classe, ho visto che per creare i comandi, utilizzi
>OleDbCommandBuilder
>
>Io utilizzo MySQL e non riesco a trovare MySQLCommandBuilder
>(non c'è nulla che si riferisce a questo metodo)
>
>Per crearlo a mano, come faccio?
>
>Dovrebbe essere una cosa del genere, se ho capito bene:
>
>adapter.updatecommand = New MySQLCommand("UPDATE ..... qui non
>so cosa mettere", conn)
>
>Il problema che non so cosa mettere come stringa SQL per l'aggiornamento.
>Che ne so io quali record deve aggiornare?
>
>Grazie.

Devi passargi un oggetto MySQLCommand parametrico:

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

In questo modo il dataadapter, quando richiamerai il metodo Update, eseguirà la query Update passata sostituendo i valori parametrici @P1, @P2, @P3 con i valori passati ValoreParam1, ValoreParam2, ValoreParam3...

Spero di essermi spiegato abbastanza bene, se hai bisogno sono a disposizione

Ciao

Alessandro


http://blogs.dotnethell.it/alebadalin

ciri Profilo | Newbie

Ti sei spiegato molto bene e ti ringrazio per la disponibilità, però continuo ad avere i miei dubbi.

Prima di tutto non mi riconosce AddWithValue come membro valido, mi riconosce Add(), spero sia lo stesso

Quindi la mia funzione sarebbe: cmd.Parameters.Add("@P1", DbType.String, ValoreParam1)

Il problema è: al posto di ValoreParam1, cosa ci devo mettere?

La colonna del dataset? La colonna del DataGridView? O cosa?

Alla fine ho provato così:

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


Dal codice (sicuramente errato perchè non funziona), capirai da solo cosa ancora non mi è chiaro

Grazie.

StefanoLep Profilo | Senior Member

Ciao, il tuo parametro lo devi valorizzare con il contenuto della cella che ti interessa:

param1=DGV.Item(Colonna, Riga).Value.ToString

in Colonna puoi mettere l'indice o il nome della colonna
in Riga presumo che tu voglia mettere la riga selezionata.



E' la passione che genera il progresso :-)

ciri Profilo | Newbie

Con i parametri proprio non mi riesce.

Ho risolto in un altra maniera:

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra
Forse non sarà il massimo delle soluzioni, ma almeno funziona.

Avrei un ultima domanda: ho impostato il datagridview in modo che l'utente possa modificare i campi, posso impostarlo in modo che l'utente possa modificare solo una determinata colonna? Perchè se mi modifica certe colonne puo creare problemi con l'esecuzione del programma.

Grazie.

SSUPERPIPPO Profilo | Guru

>Con i parametri proprio non mi riesce.
>
>Ho risolto in un altra maniera:
>
>
>For count = 0 To dgv_impegni.RowCount - 1
>param1 = dgv_impegni.Item("DATA", count).Value.ToString()
>param2 = dgv_impegni.Item("ORA", count).Value.ToString()
>param3 = dgv_impegni.Item("MEMO", count).Value.ToString()
> param4 = dgv_impegni.Item("N", count).Value
> cmd_agg = conn.CreateCommand()
>cmd_agg.CommandText = "UPDATE memo SET data = '" & param1 & "',
>ora = '" & param2 & "', memo = '" & param3 & "' WHERE id = "
>& param4
> Try
> cmd_agg.ExecuteNonQuery()
> aggiornato = True
> cmd_agg.Dispose()
> Catch ex As Exception
> aggiornato = False
> End Try
> Next
>
>Forse non sarà il massimo delle soluzioni, ma almeno funziona.
>
>Avrei un ultima domanda: ho impostato il datagridview in modo
>che l'utente possa modificare i campi, posso impostarlo in modo
>che l'utente possa modificare solo una determinata colonna? Perchè
>se mi modifica certe colonne puo creare problemi con l'esecuzione
>del programma.
>
>Grazie.

Per l'uso dei parametri ci sei andato molto vicino, appena ho un'attimo ti scrivo io il codice corretto.
Puoi rendere di sola lettura una colonna in particolare impostandone via codice la proprietà readonly=true:

TuoDataGridView.Columns(IndiceColonna).Readonly=True

Ciao

Alessandro

http://blogs.dotnethell.it/alebadalin
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-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5