Buonasera
ho una gridview dentro la quale, una volta entrato in modalità edit, ho creato un EditItemTemplate che contiene una DropDownList
Il mio fine è quello di aggiornare i dati in un Database Access , cambiando, frà gli altri, il valore della DDL, in modo programmatico, quindi con Code Behind.
Ho sperimentato questo metodo, a mio avviso poco elegante:
1) creo un HiddenField, fuori dalla GW, nel quale vado a memorizzare Id dell'oggetto che stò editando. Per far ciò, sfrutto l'evento GridViewEditEventArgs
Protected Sub EditaBox(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewEditEventArgs) Handles GwBox.RowEditing
'trovo indice riga infase di editing
Dim IndiceRigaSelezionata As Integer = e.NewEditIndex.ToString
'trovo idoggetto selezionato
Dim IdOggetto As Integer = GwBox.DataKeys(IndiceRigaSelezionata).Value
'scrivo id in un hiddenFiled
HFIdOggetto.Value = IdOggetto.ToString
PopolaGw()
End Sub
2) trovo il valore della DDL, che ha proprietà AutoPostBack="true"; sfrutto anche evento onselectedindexchanged della DDl, creando una funzione che ho chiamato "Agg" nella quale prendo IdOggetto, prendo valore selezionato da DDL, ed infine salvo il tutto nel DB
Protected Sub Agg(ByVal sender As Object, ByVal e As System.EventArgs)
'trovo il valore della DropDOwnList selezionato tramite oggetto sender
Dim IdTipoBox As String = CType(sender, DropDownList).Text
'recupero valore idoggetto dall'hddenfield
Dim IdOggettoSelezionato As String = HFIdOggetto.Value
'aggiorno campo nel db
Dim SqlUpdateTipoBox As String = "UPDATE BoxLatSx SET IdTipoBox = " & IdTipoBox & " WHERE IdBox = " & IdOggettoSelezionato
Dim cn As New OleDbConnection(CnStr)
cn.Open()
Dim cmd As New OleDbCommand(SqlUpdateTipoBox, cn)
cmd.ExecuteReader()
cmd.Dispose()
cn.Close()
cn.Dispose()
End Sub
Mi domando se esiste un metodo più "elegante" e meno "intrecciato" per recuperare valore DDL e IdOggetto Programmaticamente.
Altra cosa. La DDL si popola grazie ad una AccessDataSource, della quale imposto i parametri tramite Code Behind. Come faccio ad impostare la proprietà SelectedValue della DDL ? Con il modo canonico (ovvero con codice scritto direttamente sulla pagina aspx) il parser mi da errore, dicendo che non trova il campo del database.
Grazie in anticipo per la risposta.