[ Orca84 @ 05.04.2014. 08:44 ] @
Pozdrav dragi prijatelji,

Imam problem koji vec par dana ne mogu da prevaziđem.

Naime, muči me dinamičko kreiranje kontrola na stranici. Izvedba treba da bude ASP.NET VB. Manje više mi je jasno kako se to radi u VB.NET Desktop aplikaciji, ali ovde jednostavno ne funkcioniše tako.
Da bih što bolje objasnio šta mi treba, napisaću psudo-kod
Code:

for i = 1 to 10
     dodaj radiobutton Stavka1(i)
       Stavka1(i).group = i
     dodaj radiobutton Stavka2(i)
       Stavka2(i).group = i
     dodaj radiobutton Stavka3(i)
       Stavka3(i).group = i
     dodaj radiobutton Stavka4(i)
       Stavka4(i).group = i
next


Da li se ovo radi u Page_Load ili Page_Init?

Nakon ovoga, trebalo bi na neki način da u određenom trenutku povučem vrednosti iz kreiranih kontrola.
Uz sve to, trebao bi mi i Event za svaki radiobutton za klik na njega.


Veliko hvala i pozdrav
[ dusans @ 05.04.2014. 08:53 ] @
Možeš i u Load-u i u Init-u, radiće u oba slučaja mada što pre (init), to bolje.
Kreiranje dinamičkih kontrola radiš uvek, dakle i na prvo učitavanje i na postback.
Nemoj da zaboraviš da postaviš ID svakoj kontroli da bi sve funkcionisalo kako treba.
Takođe je bitan i redosled radnji, mislim da bi ID trebalo dodeliti pre dodavanja u parent-a (ili obratno, davno sam radio ovo).

Ako sve uradiš kako treba, kontrole će dobijati i vrednosti i fire-ovati evente
kao da se radi o najnormalnije kreiranim kontrolama kroz aspx ili ascx.

[ dejanet @ 05.04.2014. 11:26 ] @
Takodje, slucaj koji si opisao mozes elegantno da resis koristeci Repeater kontrolu.

<asp:Repeater runat="server">
<ItemTemplate>
.....
</ItemTemplate>
</asp:Repeater>
[ Orca84 @ 05.04.2014. 12:33 ] @
Ok, repeater mi i jos vise odgovara jer moram da ponovim User Control (ascx).
Ali i dalje mi ostaje problem kako da pokupim vrednosti iz njih, i kako njima da prosledim parametre iz koda.
[ dejanet @ 05.04.2014. 13:07 ] @
Imas puno nacina, npr. napuni neku listu, pa bind-uj repeater.

List<tvojObjekat> tvojaLista = new List<tvojObjekat>()
...
...pumpaj listu
...
tvojRepeater.Datasource = tvojaLista;
tvojRepeater.DataBind();

Posle u aspx-u koristi Eval("poljeIz_tvojObjekat")...

Ah da, vrednosti iz njih kupis na neki UI event i prosledis na server side(code behind).
[ Orca84 @ 08.04.2014. 08:55 ] @
Jos uvek mi nije uspelo.

Bojim se da mi treba malo razjasnjenje punjenja liste.
Predpostavimo da se moja kontrola zove <Stavka>. Kazimo jos i da <stavka> ima svojstva <tekst1> i <tekst2>.

Dakle, kako da napravim listu od n Stavki, i da svakoj stavci zadam pripadajuce tekstove.
Posle toga, cela lista treba da zavrsi u Repeater-u.

P.S.
Pomoglo bi mi i da znam kako tacno da deklarisem stavku, ako se ona povlaci iz Stavka.ascx.

Hvala puno na dosadasnjoj pomoci.
[ dejanet @ 08.04.2014. 11:18 ] @
Trebalo bi da setujes data listu, a ne listu user kontrola.

Bindujes Repeater sa data listom, na samoj stranici dodeljujes vrednosti asp kontroli(npr radio button) i tvojoj user control.

Ako je potrebno, User kontrolama, mozes da prosledis data preko parametara, koje definises u User Control.

Code:
public class TvojaDataClass
{
    public string Tekst1{ get; set; }
    public string Tekst2{ get; set; }
}
...
...
protected void Page_Load(object sender, EventArgs e)
{
        if (!IsPostBack)
        {
        BindRepeater();
    }
}

private void BindRepeater()
{
    List<TvojaDataClass> tvojaLista = new List<TvojaDataClass>();
    
    TvojaDataClass stavka = new TvojaDataClass();
    stavka.Tekst1="name 1";
    stavka.Tekst2="name 2";
    tvojaLista.Add(stavka );
    //... resis petljom ili prosledis listu iz db-a

    tvojRepeater.Datasource = tvojaLista;
     tvojRepeater.DataBind();
}