做一个单选的控件
在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;
}但是不能用,那应该怎么做呢?
在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;
}但是不能用,那应该怎么做呢?
在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;
}
但是不能用,那应该怎么做呢?
另外page_load没法用吧,这个是CS代码用户控件,不是ascx的
.
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;
}
}
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”表示“类”,此处应为“变量”还请高手指点一下阿.谢谢啦
“System.Web.UI.WebControls.RadioButton”表示“类”,此处应为“变量”这个问题找到了,我用了RadioBtn,这里忘了替换,呵呵呵
但是上面那个麻烦还是想不明白
{
get
{
EnsureChildControls();
for (int i=0; i < qstnum; i++)
{
if (RadioBtn[i].Checked)
return i;
}
return -1;
}
}能取到每个单选按钮的值,但是结果都是没有选中
如果通过事件来做,在第三个自定义里可以检查到选中状态,其他同样的控件不能跳到void CheckChangd(Object sender, EventArgs e)中去执行
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])放在最后就什么结果都取不到了
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>