[ alokin_n @ 21.04.2011. 16:44 ] @
Pozdrav

Pocetnik sam u asp.net - u ali ne i u programiranju. Imam problem da uradim sledecu stvar.
Potrebno mi je:
Kada korisnik udje na stranicu, u zavisnosti od podataka u bazi njemu ce se ispisati nesto ovog tipa
-ime 1
-ime 2
-ime 3

E sad, potrebno mi je da pored svakog tog "ime x" bude neko dugme ili jos bolje slicica na kojoj bi bio neki plusic i klikom na to treba da mi izadju detalji za to ime:
Znaci klikom na ime 2 treba da bude:
-ime 1
-ime 2
detalji o ime 2
-ime 3

Onda, klikom na - dugme ili slicicu da nestanu ti detalji. Razumete sta hocu da kazem?

Planirao sam da koristim ajax. Za potrebe testa to sam uradio i to nije nikakav problem, ali problem mi je sto je to staticko, a ovo dinamicko. I ja ne znam kako da dinamicki napravi te button-e ili slicice sa plus i minus i kako da im dinamicki dodelim akcije.
Ono sto sam staticki uradio je nesto tipa:
Code:

 <asp:UpdateProgress ID="UpdateProgress1" runat="server">
        <ProgressTemplate>
        Ucitavanje ....
        </ProgressTemplate>
        </asp:UpdateProgress>
        <asp:UpdatePanel ID="UpdatePanel1" runat="server">
        <ContentTemplate>
            <asp:Panel ID="Panel1" runat="server"> 
            Neki skriveni i pojavljujuci tekst <br />
            </asp:Panel>
       
         <asp:Button ID="Button1" runat="server" Text="Promeni" 
            onclick="Button1_Click" />
        </ContentTemplate>
        
        </asp:UpdatePanel>

Code:

protected void Button1_Click(object sender, EventArgs e)
    {
        if (Panel1.Visible == true)
            Panel1.Visible = false;
        else
            Panel1.Visible = true;
    }


Kako to da izvedem dinamicki?
[ Shadowed @ 21.04.2011. 19:00 ] @
Jedan od nacina: potrazi po netu kako se koristi repeater. Onda za item template koristi taj "expander" koji si napravio, stavi mu datasource na listu objekata koji se prikazuju i u itemdatabound eventu povezes podatke sa item template-om. Ili uz pomoc <% %> kako ti vec vise odgovara.
[ alokin_n @ 21.04.2011. 20:20 ] @
Pre svega, hvala na odgovoru.
Uspeo sam da napravim za test neki repeater i da ga povezem.
Medjutim, to sto mene muci je kako da ubacim ovu mogucnost sa prikazivanjem i skrivanjem podataka.
Dakle, uradio sam nesto ovako:

Code:

<asp:Panel ID="Panel2" runat="server">
        <asp:Repeater ID="Repeater1" runat="server">
        <HeaderTemplate>
        <table border="1">
        <tr><td>Prvo</td><td>Drugo</td></tr>
        </HeaderTemplate>
        <ItemTemplate>
        <tr><td><%# DataBinder.Eval(Container.DataItem,"ime") %> </td>      
        <td><%# DataBinder.Eval(Container.DataItem,"prezime") %> </td>
        </tr> 
         </ItemTemplate>
        <FooterTemplate></table></FooterTemplate>
        </asp:Repeater>

    </asp:Panel>


I prosledio neke vrednosti i radi super.
Ali ne shvatam kako da za svaki od tih dodam po jos jedan panel u koje bih ispisivao podatke koji mogu da se prikazu / sakriju. Koriscenjem ajax-a.
Tacnije, ako u itemtemplate dodam da bude ovako:

Code:


 <asp:Repeater ID="Repeater1" runat="server">
        <HeaderTemplate>
        <table border="1">
        <tr><td>Prvo</td><td>Drugo</td></tr>
        </HeaderTemplate>
        <ItemTemplate>
        <tr><td><%# DataBinder.Eval(Container.DataItem,"ime") %> </td>      
        <td><%# DataBinder.Eval(Container.DataItem,"prezime") %> </td>
              
          <asp:UpdateProgress ID="UpdateProgress1" runat="server">
        <ProgressTemplate>
        Ucitavanje ....
        </ProgressTemplate>
        </asp:UpdateProgress>
        <asp:UpdatePanel ID="UpdatePanel1" runat="server">
        <ContentTemplate>
            <asp:Panel ID="Panel1" runat="server"> 
            Neki skriveni i pojavljujuci tekst <br />
            </asp:Panel>       
         <asp:Button ID="Button1" runat="server" Text="Promeni" 
            onclick="Button1_Click" />
        </ContentTemplate>
        
        </asp:UpdatePanel>

        </td>
        </tr> 
        
        </ItemTemplate>
         <FooterTemplate></table></FooterTemplate>
        </asp:Repeater>

Nece moci jer ne moze kreirati dva panela sa tim imenom ili dva button-a sa tim imenom istim.

Znaci tako nesto da povezem da radi ucitavanje na istoj strani. Ako bih na drugoj strani npr. prikazi_detalje.aspx to slao onda bih stavio adresu tpa prikazi_detalje.aspx?id=neki_id i onda bih tamo na onoj strani hvatao id i prikazivao sta treba.
Ali ja bih to da ubacim da vec bude ucitano, samo da se po potrebi prikazuje/sakriva...

Hvala jos jednom
[ Shadowed @ 21.04.2011. 21:22 ] @
Huh, nisam odavno koristio repeater, mislim da ne moras da stavljas ID-ove, samo stavis event handler.
[ alokin_n @ 21.04.2011. 21:39 ] @
To mi je problem.
Kad ne stavim id i kad kliknem na dugme onda se primeni na sve redove.
Ne znam kako da razlucim da se primenjuje samo na taj red na koji je kliknuto...
Nesto kao tipa, lupicu sad, kad bi moglo uz button da se posalje neki id pa da tako znam sta da ukljucim/iskljucim....
[ dejanet @ 21.04.2011. 22:02 ] @
..button treba postaviti:

<asp:Button ID=... runat=server Text=.... CommandArgument=... CommandName=... />

pa ga onda obradjujes na neku akciju(command name) u zavisnosti od commandargumenta koji ti je dinamicki...
[ alokin_n @ 21.04.2011. 22:33 ] @
Hvala puno na informacijama, ideja mi je jasna.
Probacu da razradim sutra, sad sam pokusao na brzaka ali nije proslo.

Javlja mi se problem kako da u commandArgument dodam nesto dinamicki, kojim tagom, kako?
A drugo, nesto razmisljam, meni ovde treba da nestane panel jedan ili da se pojavi.
Kako i njih da ubacim dinamicki id da imaju? Prakticno bi mi s eonda svelo kad prosledim commandArgument preko buttona, to bi bilo u stvari id panela koji treba ukljuciti/iskljuciti i time bih zavrsio posao...
[ pl4stik @ 22.04.2011. 07:22 ] @
Ma pusti repeater i nabaci grid i neki datasource i vezi sve to deklarativno (da bi dobio formatiran grid) i jednu od kolona najcesce id tj. ona koja sadrzi pk za detail koji hoces da prikazes ispod napravi na templatedfield. Edituj itemtemplate i u njemu imash label1, a ti dodaj jos jedan npr. grid i neki datasource sa parametrom label1 za prikaz detail-a.

Tako dobijesh master/detail, a da bi taj detail ispadao ubaci ga u panel kome dodash CollapsiblePanel extender.


Happy coding

[ dusans @ 22.04.2011. 08:55 ] @
Prvo, kada ubaciš kontole u repeater, dobićeš unique client ID-jeve kontrola kada se budu renderovale i ne treba da brineš u vezi toga (Mislim da ce biti tipa IDRepeatera + ID + IndexItema).
Drugo, kao što binduješ tekstove i šta ti ja znam, isto tako možeš da binduješ i CommandArgument button-a.
Treće, preko Repeater.Items.Controls možeš da gađaš svoje panele za detalje i da radiš Show/Hide zavisno od sender client ID-a ili CommandArgument-a.

Pozdrav!
[ alokin_n @ 22.04.2011. 14:29 ] @
Hvala na odgovorima, ali cu morati malo detaljnije izgleda da ucim neke stvari.
Na osnovu primera sa neta i slico ne mogu da pohvatam da sve to povezem kako treba :S
Najvise oko tih kontrola i ID-jeva jer trazi da bude prost zapis, znaci bukvalno ID="nesto" , nesto-prost string :S

Cackacu jos malo oko toga, ako ne uspem, ici cu grubom silom - nova stranica na kojoj su detalji :)
[ alokin_n @ 22.04.2011. 15:08 ] @
EDIT:
Uspeo sam.
Jednostavno sam stavio u repeater-u kao sto ste rekli, da ne brine o kontrolama:
Code:


<ItemTemplate>
        <tr><td><%# DataBinder.Eval(Container.DataItem,"ime") %> </td>
        <td><%# DataBinder.Eval(Container.DataItem,"prezime") %> </td></tr>
        <tr><td colspan="2">  
            <asp:CollapsiblePanelExtender ID="CollapsiblePanelExtender1" runat="server" CollapseControlID="Button1" TargetControlID="Panell1" ExpandControlID="Button2" Collapsed="true">
            </asp:CollapsiblePanelExtender>
            
            <asp:Panel ID="Panell1" runat="server">
            <%# DataBinder.Eval(Container.DataItem,"godiste") %> 
            </asp:Panel>

            <asp:Button ID="Button1" runat="server" Text="Button" /> 
            <asp:Button ID="Button2" runat="server" Text="Button2" />
              </td></tr>
        </ItemTemplate>


I radi bas kako treba. Iako mi nije jasno zasto ne brka sa ovim buttonima kad mu je dat id, tj. kako sad dozvoljava da ih ima vise, al ajd.
Idem sad da probam sve to da integrisem u pravu aplikaciju :)

Hvala puno