19 messaggi dal 06 settembre 2002
Ho creato una pagina che richiama dinamicamente dei usercontrol (liste impaginate), ora non riesco a tenere in viewste gli usercontrol che essendo creati dinamicamente non hanno riferimenti sul html. Infatti se per caso passo ad un'altra pagina della lista, di uno dei user control, ricarico tutti gli usercontrol da capo. Se metto il tutto dentro ispostback mi ritrovo che non ho più gli usercontrol Ho provato a usare loadviewstae ma ho problemi di cast. (quale cast devo usare per memorizzare gli usercontrol nel viewstate?) Come faccio??? Forse con gli user control creati dinamicamente non si riesce a tenerli nel viewstate.

Grazi a tutti

Il file

Imports Microsoft.VisualBasic
Public Class associa_profilo_funzioni
Inherits System.Web.UI.Page
Protected WithEvents gestioneLinkButton As System.Web.UI.WebControls.LinkButton
Protected WithEvents tab As System.Web.UI.WebControls.Table
Protected WithEvents modificaButton As System.Web.UI.WebControls.Button
Protected WithEvents annullaButton As System.Web.UI.WebControls.Button
Protected WithEvents lblMsg As System.Web.UI.WebControls.Label
Protected WithEvents Form1 As System.Web.UI.HtmlControls.HtmlForm
Protected WithEvents page1 As System.Web.UI.HtmlControls.HtmlGenericControl

Dim SessionUser As User
Event eccezione(ByVal e As err_event)
Dim codice_menu As String
Public codice_profilo As String
Dim lista As ArrayList
Protected WithEvents CodiceProfilo As System.Web.UI.WebControls.Label
Protected WithEvents Descrizione As System.Web.UI.WebControls.Label
Protected WithEvents aggiornaButton As System.Web.UI.WebControls.Button
Protected WithEvents indietroButton As System.Web.UI.WebControls.Button
Protected WithEvents cancellaButton As System.Web.UI.WebControls.Button
Dim hash As Hashtable
Dim hashcontrols As Hashtable

#Region " Web Form Designer Generated Code "

'This call is required by the Web Form Designer.
<System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()

End Sub

Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Init
'CODEGEN: This method call is required by the Web Form Designer
'Do not modify it using the code editor.
InitializeComponent()
End Sub

#End Region

Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

SessionUser = CType(Session("user"), User)
If Not IsNothing(SessionUser) Then

'creare gli oggetti (conector e connection) per la connessione con il DataBase
Dim connector As New DBconnector
Dim connection = connector.getConnection_contents()

Try

codice_profilo = Request("codice_profilo")
Form1.Visible = True
page1.Visible = False

'aprire la connessione del database (contents.mdb)
connection.Open()

Dim sqlProfilo As String = "SELECT * FROM profili WHERE codice_profilo = '" & codice_profilo & "'"
Dim rsProfilo = connector.getCommand(sqlProfilo, connection)
Dim readerProfilo = rsProfilo.ExecuteReader()

If readerProfilo.read() = True Then
CodiceProfilo.Text = readerProfilo("codice_profilo") & "2"
Descrizione.Text = readerProfilo("descrizione")
End If

readerProfilo.Close()

If Not IsPostBack Then

'MENU
'leggere la tabella (menu)
Dim sqlMenu As String = "SELECT codice_menu, descr FROM menu ORDER BY ordine"
Dim rsMenu = connector.getCommand(sqlMenu, connection)
Dim readerMenu = rsMenu.ExecuteReader()
lista = New ArrayList
hash = New Hashtable
hashcontrols = New Hashtable
While readerMenu.Read
lista.Add(readerMenu("codice_menu"))
hash.Add(readerMenu("codice_menu"), readerMenu("descr"))
End While
readerMenu.Close()
connection.close()

'Tabella che contiene i menu e le loro funzioni....
Dim num As Integer = lista.Count
Dim i As Integer

For i = 0 To num - 1


Dim lu As lista_funzioni = DirectCast(LoadControl("lista_funzioni.ascx"), lista_funzioni)
lu.codice_menu = lista.Item(i)
hashcontrols.Add(lista.Item(i), lu)
lu.descr = hash.Item(CType(lista.Item(i), String))



Dim butt As i_tasto_menu = DirectCast(LoadControl("i_tasto_menu.ascx"), i_tasto_menu)

butt.grid = lu
Dim rw As New TableRow
Dim rw2 As New TableRow
Dim b_cell As New TableCell
Dim g_cell As New TableCell

b_cell.Controls.Add(butt)
Dim btext_cell As New TableCell
btext_cell.Text = "&nbsp;Menu " & hash(CType(lista.Item(i), String))
Dim hold As New Panel
g_cell.Controls.Add(lu)
g_cell.ColumnSpan = 2
g_cell.HorizontalAlign = HorizontalAlign.Justify
rw.Cells.Add(b_cell)
rw.Cells.Add(btext_cell)

rw2.Cells.Add(g_cell)
tab.Rows.Add(rw)
tab.Rows.Add(rw2)

viewstate.Add(lista.Item(i), tab)

Next
End If


Catch err As Exception

Response.Write("<script>parent.body.location.href='error_page.aspx?errore=" & Replace(err.ToString, vbCrLf, "") & "';</script>")

Finally

connection.close()
connection = Nothing

End Try

Else

Response.Write("<script>parent.location.href='index.aspx';</script>")

End If

End Sub





Il ViewState memorizza c'ho che ogni controlla vuole che si memorizzi per recuperare il suo stato tra i postbacks ma non memorizza il fatto che una pagina abbia una certa struttura di controlli. Tocca a te ricrearli sfruttando campi nascosti o altri vari input (anche il viewstate stesso)

Ciao

Il mio blog
Homepage
19 messaggi dal 06 settembre 2002
Sono riuscito a portare le proprietà del controlllo sul viewstate, aggiungendo il controllo ai controilli della pagina.
Usando:

MIOCONTROLLO.InitializeAsUserControl(Page)
Me.Controls.Add(MIOCONTROLLO)
MIOCONTROLLO.EnableViewState = True

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.