PDA

View Full Version : [asp.net]contentplaceholder in modo dinamico


Jointella
07-07-2009, 15:55
ciao a tutti ho un problema,volevo sapere se è possibile caricare in modo dinamico dei controlli dentro un contentplaceholder... in che senso


io ho una pagina passata tramite get,faccio una query e mi vedo quale pagina e quali controlli caricarmi...adesso viene il problema come faccio a dire in che parte della pagina deve caricarsi i controlli??? ho pensato di usare dei contentplaceholder di prendermi il nome da db e aggiungere il controllo ascx ed è qua che ho il problema come faccio a prendere il campo da db e a dirgli è questo il contetplaceholder?




//mi prendo l'id del contenitore e per ognugno carico gli eventuali controlli
for (int i = 0;lista_contenitore.Count !=i ; i++)
{

ArrayList lista_moduli = conn_bd.ListaModuli(Request.QueryString.Get("id"), lista_contenitore[i].ToString());
//carico tutti i controlli dentro al contetplaceholder
for (int j = 0; lista_moduli.Count != j; j++)
{

ContentPlaceHolder cicciobuffo = new ContentPlaceHolder();

//ecco il problema sperò risolvibile Sigh
cicciobuffo= ContentProva;
//carico il controllo nel contenitore
Control contr = LoadControl(conn_bd.VisualizzaModulo(lista_moduli[j].ToString()));
cont.Controls.Add(contr);

}

}

Kralizek
07-07-2009, 16:11
1) il controllo PlaceHolder é fatto apposta per casi come il tuo ;)

2) all'inizio del lifecycle della pagina creati un dictionary <string, PlaceHolder> e popolalo usando l'ID del placeholder


var holders = new Dictionary<string, PlaceHolder>();
foreach (Control ctl in Page.Controls)
{
if (ctl is PlaceHolder)
{
var holder = (Dictionary<string, PlaceHolder>)ctl;
holders.Add(holder.ID, holder);
}
}


3) nel database hai l'ID del placeholder da utilizzare per piazzare il controllo. A questo punto basta fare cosí


DataRow row = GetDataRow(); // your logic
var myControl = GetMyControl(row); // your logic
string holderName = row.Field<string>("PlaceHolderName");

holders[holderName].Controls.Add(myControl);


;)

Kralizek
08-07-2009, 23:02
chissà se funziona...