novecento ha scritto:
Guarda ... non è un problema di variabile ma di eventi rispetto al ciclo di vita della pagina...
Ho capito finalmente il perchè. Sai venendo dal VB6 e poi VB.NET non immaginavo che il postback della page mi annullasse la variabile. Grazie
... dovresti gestire l'evento OnSelectedIndexChanged generato dalla selezione di un elemento e direttamente nella corrispondete SUB potresti scatenare il DataBind della seconda DDL avendo anche a disposizione la proprietà Nome
Quell'evento già lo gestivo via codice quando la prima ddl faceva postback, ma a me serviva alla prima visualizzazione della grid in editmode.
Ho risolto cosi:(ho cambiato qualche nomenclatura tanto per fare casino)
Partial Class Assegn
Dim NomeTurno as string
Protected Sub DDL_Gio_DataBinding(ByVal sender As Object, ByVal e As System.EventArgs)
'serve a passare il parametro del nome del turno nell'accessdatasource della seconda ddl
ADS_Gio.SelectParameters("Nome").DefaultValue = NomeTurno
End Sub
Protected Sub DDL_turni_DataBound(ByVal sender As Object, ByVal e As System.EventArgs)
'leggo il valore selezionato nella prima ddl
NomeTurno = CType(sender, DropDownList).Text
End Sub
Protected Sub Carica_gio()
Dim sql As String
Dim DS As DataSet
Dim MyConnection As OleDbConnection
Dim MyCommand As OleDbDataAdapter
MyConnection = New OleDbConnection(System.Web.Configuration.WebConfigurationManager.ConnectionStrings("Access").ConnectionString)
MyConnection.Open()
NomeTurno = DirectCast(GV_Ass.Rows(GV_Ass.EditIndex).FindControl("DDL_Turni"), DropDownList).Text
sql = "SELECT Giornate.giornata FROM ((Turni LEFT OUTER JOIN Giornate ON Turni.ID = Giornate.idturno) LEFT OUTER JOIN Impianti ON Turni.idImp = Impianti.id) WHERE (Impianti.Impianto = '" & DDL_Imp.SelectedValue & "') AND (Turni.Nome = '" & NomeTurno & "')"
MyCommand = New OleDbDataAdapter(sql, MyConnection)
DS = New DataSet
MyCommand.Fill(DS, "Giornate")
CType(GV_Ass.Rows(GV_Ass.EditIndex).FindControl("DDL_Gio"), DropDownList).DataSourceID = ""
CType(GV_Ass.Rows(GV_Ass.EditIndex).FindControl("DDL_Gio"), DropDownList).DataSource = DS.Tables("Giornate")
CType(GV_Ass.Rows(GV_Ass.EditIndex).FindControl("DDL_Gio"), DropDownList).DataTextField = "Giornata"
CType(GV_Ass.Rows(GV_Ass.EditIndex).FindControl("DDL_Gio"), DropDownList).DataValueField = "Giornata"
CType(GV_Ass.Rows(GV_Ass.EditIndex).FindControl("DDL_Gio"), DropDownList).DataBind()
End Sub
End Class
Nel markup ho inserito SelectedValue='<%# Bind("giornata") %>' per associare la seconda ddl e ora funziona questo.
Se cambio valore alla prima ddl quindi postback mi restituisce il seguente errore:
InvalidOperationException:
I metodi di associazione dati come Eval(), XPath() e Bind() possono essere utilizzati solo nel contesto di un controllo con associazione a dati.
Prima caricavo con la sub carica_gio la seconda ddl sul selectedindexchanged della prima e funzionava.
Ma adesso vorrei chiederti è l'ultima cosa, per ricaricare le giornate sulla seconda ddl posso inviare all'accessdatasource un nuovo parametro e se si come si fa? O cambiare la query? o qualcos'altro?
GRazie 100000 e scusami se ti inquieto