Avatar billede dennisjuul Nybegynder
17. april 2005 - 18:12 Der er 28 kommentarer og
2 løsninger

Radiobuttonlist som custom control

Hej!

Jeg skal lave en radiobuttonlist i en webform (C#) og den skal udover knappen og tekstfeltet og have et billede til hvert element, som skal kunne indsættes dynamisk.

Nogle gode idéer til dette?

Detaljeret beskrivelse, tak.

Dennis
Avatar billede snepnet Nybegynder
17. april 2005 - 19:02 #1
sådan den enkle model vil nok være noget i stil med at du definere dig et item der kan bestå af et billede, og en radiobutton med tekst.

du kan så have en kontrol der kan rendere så mange af de items som du ønsker.... så er du vel flyvende.

meeeen.... når du nu beder om en detaljeret beskrivelse - er det så en løsning i kode du vil have ?

mvh
Avatar billede dennisjuul Nybegynder
17. april 2005 - 19:07 #2
Altså hvad jeg mente med en detaljeret beskrivelse er hvad jeg f.eks. skal skrive i min WebCustomControl-fil og hvordan jeg skal kalde min nye radiobuttonlist i min web-form.

Så hvis du kan hjælpe mig med det, vil det bare være lykken.
Avatar billede snepnet Nybegynder
17. april 2005 - 19:20 #3
oki ... du kan starte med at lave dit et fornuftigt item... kunne se ud som noget i denne stil :

    public class ImageRadioButtonItem: Control, INamingContainer
    {
        private Image image;
        private RadioButton rdo;

        private string _groupName;
        private string _imageUrl;
        private string _text;
       
        private string groupName;

        public string ImageUrl
        {
            get{return _imageUrl;}
            set{_imageUrl = value;}
        }

        public string Text
        {
            get{return _text;}
            set{_text = value;}
        }

        public string GroupName
        {
            get{return _groupName;}
            set{_groupName = value;}
        }

        protected override void OnInit(EventArgs e)
        {
            image = new Image();
            image.ImageUrl = this.ImageUrl;

            rdo = new RadioButton();
            rdo.GroupName = this.GroupName;
            rdo.Text = this.Text;
        }

        protected override void CreateChildControls()
        {
            Controls.Add(image);
            Controls.Add(rdo);
        }
    }

ovenstående kan du sætte ind på en side sådan her :

ImageRadioButtonItem item = new ImageRadioButtonItem();
item.Text = "hej";
item.ImageUrl = "hvad du nu har";
item.GroupName = "someGroup";
somePlaceHolder.Controls.Add(item);

... jeg skal lige ordne noget... så får du et eksempel på en ImageRadioButtonItemList.

mvh
Avatar billede snepnet Nybegynder
17. april 2005 - 19:25 #4
(private string groupName; kan du bare ignorere)
Avatar billede dennisjuul Nybegynder
17. april 2005 - 19:42 #5
tak for det.
Avatar billede snepnet Nybegynder
17. april 2005 - 19:43 #6
oki ... jeg er tilbage igen.

du kunne lave en samling af dem sådan her :

public class ImageRadioButtonList : Control, INamingContainer
{
    private string _groupName;
    private ImageRadioButtonItem[] _items;

    public string GroupName
    {
        get{return _groupName;}
        set{_groupName = value;}
    }       

    public ImageRadioButtonItem[] Items
    {
        get{return _items;}
    }

    public ImageRadioButtonList(ImageRadioButtonItem[] items, string groupName)
    {
        this._items = items;
        this.GroupName = groupName;
    }

    protected override void CreateChildControls()
    {
        foreach(ImageRadioButtonItem item in Items)
        {
            item.GroupName = this.GroupName;
            Controls.Add(item);
            Controls.Add(new LiteralControl("<br>"));
        }
    }
}

og indsætte dem på en siden sådan her :

private void Page_Load(object sender, System.EventArgs e)
{
    ImageRadioButtonItem[] items = new ImageRadioButtonItem[5];

    for(int i=0;i<items.Length;i++)
    {
        items[i] = new ImageRadioButtonItem("someurl", "sometext");
    }
   
    ImageRadioButtonList list = new ImageRadioButtonList(items, "someGroupName");

    Form1.Controls.Add(list);
}

nu er det bare så du har et eller andet at starte på .... der er lang vej endnu, hvis det skal blive noget der kan bruges sådan for alvor.

mvh
Avatar billede snepnet Nybegynder
17. april 2005 - 19:45 #7
jeg tror næsten det er nemmere, hvis du skriver hvordan du godt kunne tænke dig at oprette listen....
hvis det skal være med designerunderstøttelse og hele svineriet skal der en del forskellige småting til, så hvis du "bare" vil indsætte det programmatisk (som vist) er det lidt nemmere at komme igennem.
men.... skriv lige hvad du kan klare dig med.

mvh
Avatar billede dennisjuul Nybegynder
17. april 2005 - 20:03 #8
Tak, men hvis jeg indsætter din nye kode, får jeg en fejl i linien med:
private ImageRadioButtonItem[] _items;
som den ikke kan genkende.

Dennis
Avatar billede snepnet Nybegynder
17. april 2005 - 20:16 #9
så kan klasserne vel ikke "se" hinanden.... sørg for at de ligger i samme namespace og alt der.
mvh
Avatar billede dennisjuul Nybegynder
17. april 2005 - 20:20 #10
Men skal den første del af koden ikke ligge i en .cs fil?

Dennis
Avatar billede snepnet Nybegynder
17. april 2005 - 20:30 #11
både ImageRadioButtonItem og ImageRadioButtonList skal ligge i .cs filer.

hvilket udviklingsmiljø bruger du ?

mvh
Avatar billede dennisjuul Nybegynder
17. april 2005 - 20:37 #12
Visual Studio .NET 2003
Avatar billede burningice Nybegynder
17. april 2005 - 20:51 #13
hvorfor ikke bare sublcasse ListItem og RadioButtonList, og udnytte deres allerede eksisterende funktionalitet?

public class MyOwnListItem : ListItem {
    public string Image;

    public MyOwnListItem(string text, string value, string image) {
        this.Text = text;
        this.Value = value;
        this.Image = image;
    }
}

public class MyOwnRadioButtonList : RadioButtonList {
    protected override Render(HtmlTextWriter) {
       
        for (int i = 0; i < this.Items.Count; i++) {
            MyOwnListItem item = (MyOwnListItem)this.Item[i];
           
            writer.Write(item.Text)
            writer.Write("<input type="radio" value="+ item.Value +" name="+ this.ClientID +")
            if (item.Selected) writer.Write(" checked")
            writer.Write(">");

            writer.Write("<input type="text">");
            writer.Write("<img src="+ item.Image +">");           
        }
    }
}


MyOwnRadioButtonList list = new MyOwnRadioButtonList();
MyOwnListItem item = new MyOwnListItem("1", "Januar", "januar.jpg");
list.Items.Add(item);

this.Controls.Add(list);
Avatar billede snepnet Nybegynder
17. april 2005 - 21:06 #14
ListItem er sealed
Avatar billede dennisjuul Nybegynder
17. april 2005 - 21:10 #15
ja, det skulle jeg lige til at skrive... :-D hva' så?
Avatar billede snepnet Nybegynder
17. april 2005 - 21:15 #16
tjah.... du kan lave hele rendering selv i render-metoden som cyberfessor har skrevet, eller du kan benytte en model som den jeg har skrevet om tidligere.
jeg tror egentlig du får lidt problemer med begge dele, men du kan jo give det et skud.
mvh
Avatar billede burningice Nybegynder
17. april 2005 - 21:16 #17
hrmp... *sætter mig hen i hjørnet og surmuler*

nå, så er den ide skudt lidt i sænk.
Avatar billede dennisjuul Nybegynder
17. april 2005 - 21:17 #18
øv...
Avatar billede snepnet Nybegynder
17. april 2005 - 21:20 #19
ja - det er egentlig lidt irreterende at man ikke kan overskrive en RenderItem ell.
Avatar billede snepnet Nybegynder
17. april 2005 - 21:24 #20
jo mere jeg tænker over det - jo mere bliver jeg sikker på at du nok ville være bedst tjent med at give den en halv time på google, og se om der ikke skulle være en der har fikset sådan en før.
tror der ligger en del arbejde i det før du har en lækker udgave af sådan en svedske.
mvh
Avatar billede dennisjuul Nybegynder
17. april 2005 - 21:38 #21
ja, men jeg har brugt en del tid på google og det har ikke rigtigt givet pote.
Avatar billede dennisjuul Nybegynder
17. april 2005 - 22:04 #22
Nå, men jeg vil gerne belønne dig for din tid med mit spørgsmål, så hvis du lige smider et svar, så falder der lidt af. :-D

Dennis
Avatar billede snepnet Nybegynder
17. april 2005 - 23:58 #23
oki ... jeg sidder egentlig og kigger lidt på det nu.

jeg smider det ud til dig her, hvis jeg kommer op med noget der kan bruges, og som ikke er alt for bøvlet at have med at gøre.
men indtil da synes jeg du skal kigge lidt her :
http://www.dotnetjunkies.com/quickstart/aspplus/doc/webctrlauthoring.aspx

og.... kan du ikke få et svar fra cyberfessor også ?

mvh
Avatar billede burningice Nybegynder
18. april 2005 - 09:08 #24
well, nu kom jeg jo kun med enkelt forslag som slet ikke kunne bruges ;)
Avatar billede snepnet Nybegynder
18. april 2005 - 09:50 #25
det er stadig den rigtige løsning, hvis vi på nem og enkel vis skal få viewstate-håndtering, designersuppert mv. med i løsningen - at den så ikke virker er jo blot en mindre detalje ;o)
mvh
Avatar billede burningice Nybegynder
18. april 2005 - 09:58 #26
åhja.,.. lad os se bort fra det, og håbe på compileren ikke opdager ListItem er sealed ;)
Avatar billede snepnet Nybegynder
18. april 2005 - 10:22 #27
:oD
Avatar billede dennisjuul Nybegynder
18. april 2005 - 12:38 #28
Point til jer begge for den tid I har brugt, 20 til cyberfessor (var vist lidt fedtet i det andet spørgsmål). :-D
Avatar billede dennisjuul Nybegynder
18. april 2005 - 12:41 #29
Pis, kom til at dele ligeligt, beklager snepret, du havde trods alt gjort en stor indsats i dette spørgsmål. Du må have dem til gode. (Mener at den plejer at spørge om pointfordeling npr man vælger mere end en bruger til point?)

Dennis
Avatar billede snepnet Nybegynder
18. april 2005 - 13:04 #30
Det er helt iorden :o)
Jeg kan formegentlig ikke komme på nettet igen før onsdag, men jeg skal nok poste noget her på et tidspunkt.
mvh
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