使用C#在数据列表中的SelectedIndexChanged事件上获取RadioButtonList的Selected

本文关键字:事件 获取 RadioButtonList Selected SelectedIndexChanged 使用 数据 列表 | 更新日期: 2023-09-27 17:58:07

我创建了一个DataList,其中有两个Label和一个RadioButtonList。2 Label包含问题ID和隐藏问题ID的问题,RadioButtonList包含选项。所有这些控件都是有界的。这是代码:

<asp:DataList ID="DataList1" runat="server">
    <ItemTemplate>
        <asp:Label ID="Que_id" Visible="false" runat="server" Text='<%# Eval("question_id") %>'></asp:Label>
        <asp:Label ID="Question" runat="server" Text='<%# Eval("question") %>'></asp:Label>
        <asp:RadioButtonList ID="RadioButtonList1" AutoPostBack="true" RepeatColumns="2" runat="server" OnSelectedIndexChanged="RadioButtonList1_SelectedIndexChanged">
        </asp:RadioButtonList>
    </ItemTemplate>
</asp:DataList>


我想做的是,每当用户在RadioButtonList中选择一个选项时,所选的选项及其问题id都应该存储在数据库中。将整个DataList存储在按钮单击事件中很容易,但我希望在用户为特定问题选择选项时将响应并排存储

我不知道如何在SelectedIndexChanged事件上获得问题ID,但我在SelectedIndexChanged上尝试了以下代码来获得所选的选项值,但这也不起作用

RadioButtonList rbl = (RadioButtonList)DataList1.FindControl("RadioButtonList1");
string answer=rbl.SelectedValue;


为了进一步澄清,我在DataSet中从数据库中获取了这些数据,并对其进行了问题ID、问题和选项的过滤。这些值是在if(!IsPostBack)中的Page_Load期间设置的

使用C#在数据列表中的SelectedIndexChanged事件上获取RadioButtonList的Selected

试试下面的

修改

<asp:DataList ID="DataList1" runat="server">

<asp:DataList ID="DataList1" OnItemCommand="DataList1_command" runat="server">

假设您有一个<asp:Button,id为button1,OnClick为bclick

void bclick(object sender, DataListCommandEventArgs e)
    {
        foreach (DataListItem item in DataList1.Items)
        {
            HtmlInputRadioButton radio = (item.FindControl("radioButton") as HtmlInputRadioButton);
            if (radio.Checked)
            {
                // this is you checked radio
            }
        }
    }

您可以使用HiddenField将问题ID存储在DataList中(它比不可见的标签更"自然"):

<asp:HiddenField ID="hiddenQuestionID" runat="server" Value='<%# Eval("question_id") %>' />

在RadioButtonList的事件处理程序中,可以使用sender参数来检索控件,然后获取选定的值。RadioButtonList的NamingContainer还包含HiddenField,您可以从中获得问题ID:

protected void RadioButtonList1_SelectedIndexChanged(object sender, EventArgs e)
{
    RadioButtonList rbl = sender as RadioButtonList;
    string answer = rbl.SelectedValue;
    HiddenField hiddenQuestionID = rbl.NamingContainer.FindControl("hiddenQuestionID") as HiddenField;
    string questionID = hiddenQuestionID.Value;
    ...
}