ASP.NET VB - Gridview modificare record

domenica 13 dicembre 2009 - 21.26

finescia Profilo | Newbie

Salve a tutti, vorrei sapere se è possibile selezionare in una gridview un record e poi tramite un pulsante assegnare ad un determinato campo del record selezionato il valore di una combobox e quindi eseguire l'aggiornamento nel database. A tale proposito ho scritto un pezzo di codice che intercetta nella griglia l'indice del record selezionato (indexrow), ma quando lo passo per recuperare il record (ultima riga del codice postato "condRow = dett.Rows(a)") mi viene restituito questo errore " Nessuna riga alla posizione 0" ( o 1 o 2 a seconda della riga che ho selezionato). Faccio presente che ho cercato di servirmi di dataset datatable e tableadapter. Se qualcuno può chiarirmi le idee al riguardo anche con tecniche diverse. Ogni aiuto è ben accetto. Grazie a tutti.

Dim griglia As New GridView griglia = Me.GridView1 Dim ds As DataSet1 = New DataSet1 Dim dett As DataSet1.DETTAGLIODataTable Dim cond As String Dim condRow As DataSet1.DETTAGLIORow dett = ds.DETTAGLIO Dim a As Integer Try a = griglia.SelectedRow.RowIndex Catch ex As Exception MsgBox("Non sono presenti ordinazioni") Exit Sub End Try Me.TextBox1.Text = a condRow = dett.Rows(a)

Gluck74 Profilo | Guru

L'istruzione che hai usato restituisce l'indice della riga sulla griglia, non sulla view legata. Quindi vengono considerati anche header, footer.
Dovresti assegnare alla griglia la proprietà DataKeyNames con il nome del campo chiave, ed usare quello.

Trovi esempi facilmente su MSDN e su google.
esempio:
http://msdn.microsoft.com/it-it/library/system.web.ui.webcontrols.gridview.datakeynames(VS.80).aspx
http://www.dotnethell.it/forum/messages.aspx?ThreadID=12133

finescia Profilo | Newbie

Grazie per la dritta, appena provo ti faccio sapere. Ciao.

finescia Profilo | Newbie

Ciao, ho modificato il codice in base al tuo suggerimento, non so se ho fatto bene (sono proprio un principiante) comunque il debug è andato avanti e non si ferma più alla riga incriminata, ma adesso sono incappato in un altro messaggio di errore ed esattamente alla riga (condRow.CONDIMENTI = "+ACCIUGHE, ") mi dice "Riferimento a un oggetto non impostato su un'istanza di oggetto.". CONDIMENTI è il campo del record da modificare. Non capisco il significato, potrebbe essere un problema di dichiarazioni?


Dim griglia As New GridView griglia = Me.GridView1 Dim ds As DataSet1 = New DataSet1 Dim dett As DataSet1.DETTAGLIODataTable Dim cond As String Dim condRow As DataSet1.DETTAGLIORow dett = ds.DETTAGLIO Dim a As Integer Dim dettagliotableadapter As New DataSet1TableAdapters.DETTAGLIOTableAdapter Try a = griglia.SelectedDataKey.Value Catch ex As Exception MsgBox("Non sono presenti ordinazioni") Exit Sub End Try Me.TextBox1.Text = a condRow = ds.DETTAGLIO.FindByID(a) condRow.CONDIMENTI = "+ACCIUGHE, " dettagliotableadapter.Update(ds.DETTAGLIO)

Gluck74 Profilo | Guru

mi sfugge il risultato di questa istruzioni:

Dim griglia As New GridView griglia = Me.GridView1 Dim ds As DataSet1 = New DataSet1 Dim dett As DataSet1.DETTAGLIODataTable Dim cond As String Dim condRow As DataSet1.DETTAGLIORow dett = ds.DETTAGLIO Dim a As Integer Dim dettagliotableadapter As New DataSet1TableAdapters.DETTAGLIOTableAdapter

hai detto che usi uno schema xsd??? dunque dovresti avere un tableadapter che crea la struttura e una funzione tipo getData o getDettaglio che legge i dati dalla tabella. Ti consiglio di inserire una nuova query per estrarre un unico record, chiamala getDettaglioByID.

a questo punto fai:

Dim dettagliotableadapter As New DataSet1TableAdapters.DETTAGLIOTableAdapter Dim condRow As DataSet1.DETTAGLIORow condRow = dettagliotableadapter.getDettaglioByID(a).Rows(0) 'giusto perché deve restituire una sola riga -- non ricordo se inizia da 0 o da 1 condRow("CONDIMENTI") = "+ acciughe, "

finescia Profilo | Newbie

Se ti posso dare del tu, allora devo dirti che sei un grande. Hai risolto il mio problema. Grazie.

Gluck74 Profilo | Guru

Certo che mi puoi dare del tu.
Mi fa piacere di averti aiutato, vorrei essere un guru come dici, ma ci manca ancora tanto!!!!!!!
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-2023
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5