2010-09-06 3 views
0

J'ai créé une classe qui hérite de RadioButtonList afin d'ajouter un attribut GroupName à chaque élément de liste. (pourquoi ce n'était pas là déjà je n'ai aucune idée).Ajout de GroupName aux éléments dans RadioButtonList

Cela fonctionne comme prévu lors de son rendu, mais ne conserve pas les éléments sélectionnés lors de la publication.

public class GroupedRadioButtonList : RadioButtonList 
{ 
    [Bindable(true), Description("GroupName for all radio buttons in list.")] 
    public string GroupName 
    { 
     get; 
     set; 
    } 

    protected override void RenderItem(ListItemType itemType, int repeatIndex, RepeatInfo repeatInfo, System.Web.UI.HtmlTextWriter writer) 
    { 
     RadioButton radioButton = new RadioButton(); 
     radioButton.Page = this.Page; 
     radioButton.GroupName = this.GroupName; 
     radioButton.ID = this.ClientID + "_" + repeatIndex.ToString(); 
     radioButton.Text = this.Items[repeatIndex].Text; 
     radioButton.Attributes["value"] = this.Items[repeatIndex].Value; 
     radioButton.Checked = this.Items[repeatIndex].Selected; 
     radioButton.TextAlign = this.TextAlign; 
     radioButton.AutoPostBack = this.AutoPostBack; 
     radioButton.TabIndex = this.TabIndex; 
     radioButton.Enabled = this.Enabled;    
     radioButton.RenderControl(writer); 

    } 
} 

Est-ce que quelqu'un sait ce que je suis absent?

Merci.

Répondre

0

Vous devez implémenter l'interface IPostBackDataHandler et gérer quelques méthodes. Je vous donne quelque chose que j'ai utilisé dans un contrôle similaire, seulement j'ai étendu le contrôle individuel RadioButton et non la liste. J'ai ajouté des attributs personnalisés Value et GroupName au bouton puis initialisé la valeur lors de la publication.

#region IPostBackDataHandler Members 
    void IPostBackDataHandler.RaisePostDataChangedEvent() 
    { 
     OnCheckedChanged(EventArgs.Empty); 
    } 

    bool IPostBackDataHandler.LoadPostData(string postDataKey, NameValueCollection postCollection) 
    { 
     bool result = false; 
     //check if a radio button in this button's group was selected 
     string value = postCollection[GroupName]; 
     if ((value != null) && (value == Value)) //was the current radio selected? 
     { 
      if (!Checked) //select it if not already so 
      { 
       Checked = true; 
       result = true; 
      } 
     } 
     else //nothing or other radio in the group was selected 
     { 
      if (Checked) //initialize the correct select state 
      { 
       Checked = false; 
      } 
     } 
     return result; 
    } 
#endregion 

Toutes mes excuses pour un code très optimisé :) pas

+0

Merci! Je vais essayer. J'ai maintenant remplacé RenderContents à la place et l'ai fait fonctionner, mais cela semble plus propre. – Craig

+0

2 ans après et j'ai le même problème. J'utilise exactement le même code que @Craig mais quand je mets 'radioButton.GroupName = this.GroupName;' 'LoadPostData' ne se déclenche jamais. Il ne se déclenche que si 'radioButton.GroupName = this.UniqueID;'. Des idées?? – GFoley83

Questions connexes