ListItemCollection in un controllo web personalizzato.

giovedì 06 novembre 2008 - 16.28

ysdemarc Profilo | Expert

Ho visto che la ListItemCollection non è serializzabile e non viene salvata nella ViewState...

cercando su internet ho trovato quello che dovrebbe fare per me...

ecco il link: http://www.codenewsgroups.net/group/microsoft.public.dotnet.framework.aspnet.webcontrols/topic7569.aspx

però il codice non mi funziona.. da premettere che nel mio controllo personalizzato ho 2 "listbox"

e quindi ho cambiato i due metodi SaveViewState e LoadViewState in questo modo:
(ItemsForm rappresenta la prima ListitemCollection ItemsTo la seconda)

protected override object SaveViewState()
{
Pair pair = new Pair();
pair.First = base.SaveViewState();

Pair pair2 = new Pair();

if (itemsFrom != null) pair2.First = ((IStateManager)itemsFrom).SaveViewState();
if (itemsTo != null) pair2.Second = ((IStateManager)itemsTo).SaveViewState();

pair.Second = pair2;

return pair;
}

protected override void LoadViewState(object savedState)
{
Pair pair = (Pair)savedState;

if (pair != null)
{
if (pair.Second != null && pair.Second.GetType()==typeof(Pair))
{
Pair pair2 = (Pair)pair.Second;

if (itemsFrom == null) itemsFrom = new ListItemCollection(); // queste si sono rese necessari in quando mi sono accorto che andanto a fare le rispettive LoadViewState andava in NullReferenceException
if (itemsTo == null) itemsTo = new ListItemCollection();

if (pair2.First != null)
{
((IStateManager)itemsFrom).LoadViewState(pair2.First);
}
else
{
((IStateManager)itemsFrom).TrackViewState(); // questa invece poichè ho notato che se non viene usato il metodo add di uno dei 2 collection alla fine sembrava non salvare lo stato del controllo..
//nota 1
}
if (pair2.Second != null)
{
((IStateManager)itemsTo).LoadViewState(pair2.Second);
}
else
{
((IStateManager)itemsTo).TrackViewState();
//nota 1
}
}

base.LoadViewState(pair.First);
}

}

Alla fine di tutto questo non funziona niente..

o meglio il primo caricamente della pagina va bene..
caricando la pagina ho solo la prima collection valorizzata.. dal controllo
il controllo non dovrebbe fare altro che spostare con script client gli elementi dal primo al secondo.

quindi facendo una banale postback senza spostare alcun elemento, continua a funzionare, appena sposto un solo elemento dalla prima lista alla secondo e faccio il postback mi accorgo che il programma entra nell'else delle if che ho contrassegnato come //nota 1

Qualcuno saprebbe aiutarmi..sinceramente il codice l'ho copiato bovinamente senza riuscire a capire il funzionamento..
e soprattutto come posso risolverlo?
Ho provato a usare la Session per memorizzare i dati, ma alla lettura gli items non mi cambiano se non dopo il secondo postback poichè se un pulsate tipo submit fa il postback, prima scatena l'evento page_load, poi va nel submit e poi elabora i controlli e quindi cambierebbe le session..per cui sarebbero necessatrie 2 postback consecutive per avere quello che volgio in questo caso...

ma rpeferirei una sintassi ed una logica più pulita..

sono fermo da settimane su sto controllo..aiutoooo
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