做一个单选的控件
在CreateChildControls()中动态加了四个单选按钮
如下:for(int i=0,i<4;i++)
{
RadioBtn[i]=new RadioButton();
this.Controls.Add(RadioBtn[i]);
}

但是如何才能在信息回送后访问到每个按钮的选中状态呢?
大家帮帮忙阿
好像可以用iPostBackDataHandler
但是check的状态如何确定?我是这么做:按了提交按钮后触发这个事件
public int WhoChecked()
{
         for(int i=0;i<=qstnum;i++)//这里qstnum的值是用了的,要用<=。
{
if(RadioBtn[i].Checked==true)
       return i;

}
return -1;
}但是不能用,那应该怎么做呢?

解决方案 »

  1.   

    做一个单选的控件  
    在CreateChildControls()中动态加了四个单选按钮  
    如下:  
    int qstnum;for(int  i=0,i<4;i++)  
    {  
    RadioBtn[i]=new  RadioButton();  
    this.Controls.Add(RadioBtn[i]); 
    qstnum=i;
    }                          
                                                     
    但是如何才能在信息回送后访问到每个按钮的选中状态呢?  
    大家帮帮忙阿  
    好像可以用iPostBackDataHandler  
    但是check的状态如何确定?  
     
    我是这么做:按了提交按钮后触发这个事件  
    public  int  WhoChecked()  
    {  
                     for(int  i=0;i<=qstnum;i)  
               {  
                           if(RadioBtn[i].Checked==true)  
                                         return  i;  
                             
               }  
               return  -1;  
    }  
     
    但是不能用,那应该怎么做呢?
      

  2.   

    up
    另外page_load没法用吧,这个是CS代码用户控件,不是ascx的
      

  3.   

    public class YourControl : WebControl, INamingCOntainer
    .
    CreateChildControls():for(int i=0,i<4;i++)
    {
    RadioBtn[i]=new RadioButton();
    RadioBtn[i].ID = "myRadio" + i.ToString();
    RadioBtn[i].GroupName = "myRadio";
    RadioBtn[i].CheckedChanged += new EventHandler(CheckChangd);
    Controls.Add(RadioBtn[i]);
    } void CheckChangd(Object sender, EventArgs e)
    {
       RadioButton rb = (RadioButton)sender;
       ....
       //either look into its ID or iterate through RadioBtn[]
    }orpublic int WhoChecked
    {
      get
      {
    EnsureChildControls();
    for (int i=0; i < ...; i++)
        if (RadioButton[i].Checked)
    return i;
            return -1;
      }
    }
      

  4.   

    在第三个控件里可以检查到选中状态,其他的控件不能跳到void CheckChangd(Object sender, EventArgs e)中去执行.搞不明白为什么
    public int WhoChecked这个没有用.
    用了CheckID把数据传出来
    代码:
    ...
    RadioBtn[i].CheckedChanged += new EventHandler(CheckChangd);
    ...string CheckID;
    void CheckChangd(Object sender, EventArgs e)
    {
    RadioButton rb = (RadioButton)sender; CheckID=rb.ID;
                       } 另外虽然public int WhoChecked这个没有用的,但是在编译的时候在if (RadioButton[i].Checked)处提示
    “System.Web.UI.WebControls.RadioButton”表示“类”,此处应为“变量”还请高手指点一下阿.谢谢啦
      

  5.   

    另外虽然public int WhoChecked这个没有用的,但是在编译的时候在if (RadioButton[i].Checked)处提示
    “System.Web.UI.WebControls.RadioButton”表示“类”,此处应为“变量”这个问题找到了,我用了RadioBtn,这里忘了替换,呵呵呵
    但是上面那个麻烦还是想不明白
      

  6.   

    god, you should change RadioButton[i] to your array variable nameif all you need is a seletedIndex, use RadioButtonList
      

  7.   

    改成了 public int WhoChecked
    {
    get
    {
    EnsureChildControls();
    for (int i=0; i < qstnum; i++)
    {
    if (RadioBtn[i].Checked)
    return i;
    }
    return -1;
    }

    }能取到每个单选按钮的值,但是结果都是没有选中
    如果通过事件来做,在第三个自定义里可以检查到选中状态,其他同样的控件不能跳到void CheckChangd(Object sender, EventArgs e)中去执行
      

  8.   

    而且控件在创建的时候必须把add放在前面使用,如下:
    RadioBtn[i]=new RadioButton();
    this.Controls.Add(RadioBtn[i]);
    RadioBtn[i].ID="quest"+i.ToString();//ID号,quest0开头
    RadioBtn[i].GroupName=_GroupName;//组名
    RadioBtn[i].Text=abc[i]+":"+ss;//题的正文
    RadioBtn[i].CheckedChanged += new EventHandler(this.CheckChangd);
    如果把this.Controls.Add(RadioBtn[i])放在最后就什么结果都取不到了
      

  9.   

    1. CustomControls.cs (compile it into CustomControls.dll
    csc /t:library CustomControls.cs
    )
    using System;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;namespace CustomControls
    {
      public class MyRadios : WebControl, INamingContainer
      {
    RadioButton[] rbs; public int SelectedIndex
    {
    get 
    {
    EnsureChildControls(); for(int i=0;i<rbs.Length;i++)
         if (rbs[i].Checked)
    return i;         return -1;
    }
    }

    protected override void CreateChildControls()
    {
    rbs = new RadioButton[4]; for(int i=0;i<rbs.Length;i++)
    {
    rbs[i]=new RadioButton();
    rbs[i].ID = "myRadio" + i.ToString();
    rbs[i].GroupName = "myRadio";
    rbs[i].CheckedChanged += new EventHandler(CheckChangd);
    Controls.Add(rbs[i]);
    }
    } void CheckChangd(Object sender, EventArgs e)
    {
        RadioButton rb = (RadioButton)sender;
    for(int i=0;i<rbs.Length;i++)
    {
    if (rbs[i] == rb)
    Page.Response.Write("radio " + i.ToString() + " is selected<BR>");
    }

    }
      }
    }
    2. TestRadio.aspx:
    <%@ Register TagPrefix="cc" Assembly="CustomControls" Namespace="CustomControls" %>
    <form runat="server">
    <cc:MyRadios id="rdo2" runat="server" />
    <asp:Button id="btn" runat="server" OnClick="GetRadio" Text="Click Me"/>
    </form><script language="C#" runat="server">void GetRadio(Object sender, EventArgs e)
    {
      Page.Response.Write("***" + rdo2.SelectedIndex.ToString() + "***");
    }
    </script>