请教Repeater中单选框的问题
<asp:Repeater ID="rptSubjectOfSingleSelectionList" runat="server" > <HeaderTemplate> <table cellpadding="0" cellspacing="0" class="tableList" width="800"> </HeaderTemplate> <ItemTemplate> <tr > <td > <asp:HiddenField ID="hidSingleSelectionID" runat="server" Value='<%#Eval("ID") %>'></asp:HiddenField> <b> (<%#Eval("Index")%>) <%#Eval("Question") %> (<asp:TextBox ID="txtSingleSelectionAnswer" runat="server" BorderWidth="0" Width="20px" MaxLength="1"></asp:TextBox>) </b><br /> <table width="100%" class="tableList2"> <tr align="left"><td style="width:50%"><input id="CBboxA" name="CBboxA" type="radio" value="A" runat="server" />A:<%#Eval("SelectA")%></td><td><input id="CBboxB" name="CBboxB" type="radio" value="B" runat="server" />B:<%#Eval("SelectB")%></td></tr> <tr align="left"><td style="width:50%"><input id="CBboxC" name="CBboxC" type="radio" value="C" runat="server" />C:<%#Eval("SelectC")%></td><td><input id="CBboxD" name="CBboxD" type="radio" value="D" runat="server" />D:<%#Eval("SelectD")%></td></tr> </table> </td> </tr> </ItemTemplate> <FooterTemplate> </table> </FooterTemplate> </asp:Repeater>
<%@ Page Language="C#" AutoEventWireup="true" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><script runat="server"> protected void Page_Load(object sender, EventArgs e) { if (!Page.IsPostBack) { System.Data.DataTable dataTable1 = new System.Data.DataTable(); System.Data.DataRow dr; dataTable1.Columns.Add(new System.Data.DataColumn("ID", typeof(System.Int32))); dataTable1.Columns.Add(new System.Data.DataColumn("SelectA", typeof(System.String))); dataTable1.Columns.Add(new System.Data.DataColumn("SelectB", typeof(System.String))); dataTable1.Columns.Add(new System.Data.DataColumn("SelectC", typeof(System.String))); dataTable1.Columns.Add(new System.Data.DataColumn("SelectD", typeof(System.String))); for (int i = 0; i < 8; i++) { dr = dataTable1.NewRow(); dr[0] = i*2; dr[1] = "【孟子E章】" + i.ToString(); dr[2] = "【xxxxx" + i.ToString(); dr[3] = "【yyyyyy】" + i.ToString(); dr[4] = "【测试】" + i.ToString(); dataTable1.Rows.Add(dr); } rptSubjectOfSingleSelectionList.DataSource = dataTable1; rptSubjectOfSingleSelectionList.DataBind(); } } protected void Button1_Click(object sender, EventArgs e) { foreach (RepeaterItem item in rptSubjectOfSingleSelectionList.Items) { HiddenField hidSingleSelectionID = item.FindControl("hidSingleSelectionID") as HiddenField; Response.Write("<li>问题id=" + hidSingleSelectionID.Value + "的选项是:" + Request.Form["CBbox" + hidSingleSelectionID.Value]); TextBox txtSingleSelectionAnswer = item.FindControl("txtSingleSelectionAnswer") as TextBox; Response.Write(" 输入的内容是:" + txtSingleSelectionAnswer.Text); } }</script><html xmlns="http://www.w3.org/1999/xhtml"><head id="Head1" runat="server"> <title></title></head><body> <form id="form1" runat="server"> <asp:Repeater ID="rptSubjectOfSingleSelectionList" runat="server"> <HeaderTemplate> <table cellpadding="0" cellspacing="0" class="tableList" width="800"> </HeaderTemplate> <ItemTemplate> <tr><td> <asp:HiddenField ID="hidSingleSelectionID" runat="server" Value='<%#Eval("ID") %>'> </asp:HiddenField> <b>问题 <%#Eval("ID") %> 省略: (<asp:TextBox ID="txtSingleSelectionAnswer" runat="server" BorderWidth="0" Width="20px" MaxLength="1"></asp:TextBox>) </b> <br /> <table width="100%" class="tableList2"> <tr align="left"><td style="width: 50%"> <input name="CBbox<%#Eval("ID") %>" type="radio" value="A" />A:<%#Eval("SelectA")%> </td><td> <input name="CBbox<%#Eval("ID") %>" type="radio" value="B" />B:<%#Eval("SelectB")%> </td></tr> <tr align="left"><td style="width: 50%"> <input name="CBbox<%#Eval("ID") %>" type="radio" value="C" />C:<%#Eval("SelectC")%> </td><td> <input name="CBbox<%#Eval("ID") %>" type="radio" value="D" />D:<%#Eval("SelectD")%> </td></tr> </table> </td></tr> </ItemTemplate> <FooterTemplate> </table> </FooterTemplate> </asp:Repeater> <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="提交答案" /> </form></body></html>
[解决办法]
我做过的,以下是行的通的代码。如果帮的上,别忘记给分哦,呵呵
1,ItemTemplate中的代码 单选框要设置AutoPostBack="true",并添加一个事件
<td align=center>
<asp:RadioButton ID="RadioButton1"
AutoPostBack="true" GroupName="TopicGroup" runat="server" Checked='<%#
DataBinder.Eval(Container.DataItem,"IsCurrent") %>'
OncheCkedChanged="RadioButton1_CheckedChanged" />
</td>
2,单选框事件代码
protected void RadioButton1_CheckedChanged(object sender, EventArgs e)
{
RadioButton rdb = sender as RadioButton;
RepeaterItem item = rdb.Parent as RepeaterItem;
int count = rp1.Items.Count;
string Id = (item.FindControl("hidId") as HiddenField).Value;
Entity.Topics model = TopicsBll.GetEntityByTopicID(Convert.ToInt32(Id));
model.IsCurrent = true;
TopicsBll.UpdateTopicCurrent(model);
for (int i = 0; i < count; i++)
{
RadioButton rdb1 = rp1.Items[i].FindControl("RadioButton1") as RadioButton;
if (i != item.ItemIndex)
{
rdb1.Checked = false;
}
}
DataBindConfigInfo();
}