Avatar billede stefan_v Nybegynder
17. maj 2004 - 17:01 Der er 9 kommentarer og
1 løsning

Dynamisk oprettede RadioButtons - Skelne dem fra hinanden??

Jeg har en ASP.NET side, hvor jeg gennem kode har genereret en tabel indeholdende bl.a. parvis radioButtons.
Knapperne sidder to og to, hvor den ene står for ja og den anden for nej - hver række i tabellen har et ID.

Jeg skal:
Se hvilken af de to knapper der er checked.
Tilføje ID'et fra rækken til en ArrayList sammen med en indikation om, hvilken knap der er valgt (ja eller nej).

Er det sort snak? Håber det ikke.
Nogen gode ideer derude?

Sig endelig til hvis jeg skal uddybe.

stefan_v
Avatar billede stefan_v Nybegynder
17. maj 2004 - 17:03 #1
...Det skal lige siges at ID'et på rækken IKKE er et TableRow-ID, men et id fra en database... ID'et har ikke noget med selve tabellen at gøre...
Avatar billede casper_skovgaard Nybegynder
18. maj 2004 - 09:01 #2
Kan du ikke give dine radiobuttens et id som indeholder row id'et. Fx id = "Radio" + RowID;

Når du så gennemløber dine controls kan du pille RowID'et ud fra radio id'et, og handle ud fra det.

/casper
Avatar billede stefan_v Nybegynder
18. maj 2004 - 10:03 #3
hmm... Jeg er vidst ikke helt med...
Som det ser ud nu er der for hver række i min tabel 2 radioButtons, som sidder i en gruppe for sig. De to radioButtons har det tilfældes at de har samme "DatabaseID" - forskellen er at de, naturligt nok, repræsenterer hver sin værdi (ja eller nej).

Jeg er ikke klar over hvordan jeg gennemløber mine radioButtons, række for række. Og lige så vigtigt, hvordan jeg ser hvilken af de to knapper der er selected...

Det med at indsætte RowID er måske en god ide, men jeg er ikke nok inde i traversering af controls til at jeg kan se løsningen.
Avatar billede stefan_v Nybegynder
18. maj 2004 - 10:22 #4
Er der er en Collection af samtlige RadioButtons man kan få fat i?
Med sådan én kunne man:
for(int i=0; i<collection.Count; ++i)
{
if(collection[i]==Checked)
arrayList.Add(collection[i].ID);
}

Men det er der ikke, vel? :-/
Avatar billede stefan_v Nybegynder
18. maj 2004 - 11:21 #5
jojo... mig igen! :)

Jeg har lavet følgende slam, som kunne komme til at virke, men pænt eller hurtigt er det jo ikke..:

void IterateThroughChildren(Control parent)
{
    ArrayList a = new ArrayList();
  foreach (Control c in parent.Controls)
  {
    if(c.ToString().Equals("System.Web.UI.WebControls.RadioButton") && ((RadioButton)c).Checked)
        a.Add(c.ID);
    if (c.Controls.Count > 0)
    {
      IterateThroughChildren(c);
    }
  }
}



Forbedringer ville RIGTIGT rart.
Avatar billede casper_skovgaard Nybegynder
18. maj 2004 - 13:26 #6
jeg har lavet et lille eksemple, som jeg håber du kan bruge. Hvis du har brug for en forklaring må du lige sige til :)
Avatar billede casper_skovgaard Nybegynder
18. maj 2004 - 13:27 #7
c#:

    protected System.Web.UI.WebControls.Button Button1;
        protected System.Web.UI.WebControls.PlaceHolder myPlaceHolder;
   
        private void Page_Init(object sender, EventArgs e)
        {
            RadioButtonList rbList;

            for( int count = 0; count < 10; count++)
            {
                rbList = new RadioButtonList();
                rbList.ID = "myRadio" + count.ToString();
                rbList.Items.Add( new ListItem("Ja","1"));
                rbList.Items.Add( new ListItem("Nej","2"));
                rbList.RepeatColumns = 2;

                myPlaceHolder.Controls.Add( rbList);

            }       
        }
        private void Page_Load(object sender, System.EventArgs e)
        {

            //test af dynamisk tilføj af controller
            if(Page.IsPostBack)
            {
                RecurseControls(Page);
            }
        }


       
        private void RecurseControls( Control c)
        {
            foreach( Control temp in c.Controls)
            {
                if( temp.HasControls())
                {
                    RecurseControls( temp);
                }
                else
                {
                    if( temp.GetType() == typeof(System.Web.UI.WebControls.RadioButtonList))
                    {
                        RadioButtonList rbList = (RadioButtonList) temp;
                        string result =  rbList.ID + ": " + rbList.SelectedValue;
                    }
                }
            }
        }
Avatar billede casper_skovgaard Nybegynder
18. maj 2004 - 13:27 #8
html:

        <form id="Form1" method="post" runat="server">
            <p>
                <asp:placeholder id="myPlaceHolder" runat="server" EnableViewState="true"></asp:placeholder></p>
            <p>&nbsp;</p>
            <p>
                <asp:button id="Button1" runat="server" Text="Button"></asp:button></p>
        </form>
Avatar billede stefan_v Nybegynder
18. maj 2004 - 13:33 #9
Herligt! Det kan jeg helt sikkert bruge - om ikke andet er det ihvertfald langt pænere kode, end det slam jeg fik brygget sammen. Tak skal du ha'!

Smid lige et svar, så får du en røvfuld point :)
Avatar billede casper_skovgaard Nybegynder
18. maj 2004 - 13:49 #10
Her er svaret :)

Jeg håber du får det til at virke, ellers må du lige sige til.
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