Avatar billede baddaydaddy Nybegynder
15. februar 2007 - 17:32 Der er 10 kommentarer og
1 løsning

Dynamisk oprettelse af knapper i ASP.NET

Hej
Vil gerne oprette et bestemt antal knapper på basis af antal rekker i en databaseforespørsel, har derfor lagt ind følgende kode til dette:
<%
for (int i = 0; i < antallnyheter; i++)
{
%>
  <tr>
    <td>
      <asp:Button />
    </td>
  <tr>
<% } %>

Dernest ønsker jeg at gemme en eller anden form for unik værdi på hver knap, således at dens OnClick event kan pege på den respektive række, derfor har jeg forsøgt at lægge til følgende kode, men uden at få det ønskede resultat:

<asp:Button id="Button<%= index %>" />

Men id bliver til "Button<%= index %>" i stedet for f.eks. "Button 1"

Er åben for ALLE mulige løsninger på dette problemet!
Avatar billede kalp Novice
15. februar 2007 - 17:57 #1
<%
for (int i = 0; i < 5; i++)
{
%>
  <asp:Button ID="Button1" runat="server" Text="Hejsa" />
  <% Button1.ID = i.ToString(); %>
<% } %>
Avatar billede dr_chaos Nybegynder
15. februar 2007 - 18:28 #2
Hvis du skal gøre det rigtigt skal du gøre det fra codebehind.
F.eks.

Table t = new Table();
for (int i = 0; i < antallnyheter; i++)
{
TableRow tr = new TableRow();
TableCell tc = new TableCell();
Button B = new Button();
B.ID= "Button_"+i.ToString();
tc.Controls.Add(B);
tr.Cells.Add(tc);
}
t.Add(tr);

MinPlaceHolder.Controls.Add(t);
Avatar billede baddaydaddy Nybegynder
15. februar 2007 - 21:01 #3
hvordan bruger man den PlaceHolder??

og hvordan får jeg sat den Table ud i .aspx siden??
Avatar billede dr_chaos Nybegynder
15. februar 2007 - 21:18 #4
Du laver en
<asp:placeholder id="plc" runat="Server" />

for at bruge den gør du sådan her:
Table t = new Table();
for (int i = 0; i < antallnyheter; i++)
{
TableRow tr = new TableRow();
TableCell tc = new TableCell();
Button B = new Button();
B.ID= "Button_"+i.ToString();
tc.Controls.Add(B);
tr.Cells.Add(tc);
}
t.Add(tr);
plc.Controls.Add(t);
Avatar billede baddaydaddy Nybegynder
15. februar 2007 - 21:51 #5
OK... det var jo nemt... så er jo spørgsmålet hvordan man kan få koblet et onclick event på den?! og endnu vigtigere... hvordan man får fat i den enkelte knap! Troede ikke det var så svært at finde ud af...

(skal jeg måske starte det som en ny tråd?)
Avatar billede woodbase Nybegynder
15. februar 2007 - 22:34 #6
Table t = new Table();
for (int i = 0; i < antallnyheter; i++)
{
TableRow tr = new TableRow();
TableCell tc = new TableCell();
Button B = new Button();
B.ID= "Button_"+i.ToString();
/*ADDED*/
B.Click += new EventHandler(HandleClick);
tc.Controls.Add(B);
tr.Cells.Add(tc);
}
t.Add(tr);

MinPlaceHolder.Controls.Add(t);

/*ADDED*/
protected void HandleEvent(object obj, System.EventArgs ea){
Button tmp = (Button)obj;
DoButtonEvent(tmp.ID);
}

private void DoButtonEvent(string id){
goer noget udfra id
}

Lidt afhænging af hvordan du vil have det til at virke
Avatar billede woodbase Nybegynder
15. februar 2007 - 22:35 #7
ARGH!! Skulle selvfølgelig være

protected void HandleClick(object obj, System.EventArgs ea){
DoButtonEvent(((Button)obj).ID;);
}
Avatar billede baddaydaddy Nybegynder
16. februar 2007 - 02:28 #8
Takker for hjælpen!!

Måske var det ikke qawi der skulle haft de points, da jeg gik for den sidste løsningen?!
Avatar billede dr_chaos Nybegynder
16. februar 2007 - 12:01 #9
Nej det er nok nærmere woodbase og jeg som skal dele dem.
Avatar billede kalp Novice
16. februar 2007 - 12:45 #10
i kan lægge et svar i denne tråd.
http://www.eksperten.dk/spm/762929
Avatar billede dr_chaos Nybegynder
16. februar 2007 - 13:46 #11
ok :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester