无法捕获网格中的RadioButtonList SelectedValue
本文关键字:RadioButtonList SelectedValue 网格 | 更新日期: 2023-09-27 18:17:50
i have:
<asp:TemplateField HeaderText="Choose Option">
<ItemTemplate>
<asp:RadioButtonList ID="rdbChoice" runat="server" RepeatDirection="Horizontal">
<asp:ListItem Value="A">A</asp:ListItem>
<asp:ListItem Value="B">B</asp:ListItem>
<asp:ListItem Value="C">C</asp:ListItem>
</asp:RadioButtonList>
</ItemTemplate>
</asp:TemplateField>
在按钮点击,我想得到的RadioButtonList.SelectedValue
。我试着:
protected void btnsubmit_Click(object sender, EventArgs e)
{
for (int i = 0; i <= gvQuestion.Rows.Count - 1; i++)
{
RadioButtonList rd1 = (RadioButtonList)gvQuestion.FindControl("rdbChoice");
string rd = rd1.SelectedValue.ToString();
}
}
但是我得到一个错误Object reference not set to an instance of an object.
我的错误是什么?
你的RadioButtonList的NamingContainer是GridViewRow而不是GridView,所以这是有效的:
for (int i = 0; i <= gvQuestion.Rows.Count - 1; i++)
{
RadioButtonList rdbChoice = (RadioButtonList)gvQuestion.Rows[i].FindControl("rdbChoice");
string rd = rdbChoice.SelectedValue;
}
请记住,FindControl不会递归地查看子容器,它只会在当前的NamingContainer中搜索给定的ID。
查找RadioButtonList
RadioButtonList rd1 = (RadioButtonList)gvQuestion.Rows[i].Cells[<index>].FindControl("rdbChoice");
将索引引用替换为单元格编号,并直接在单元格内查找。或者有时这是有效的,但我没有多少运气在行级别找到:
RadioButtonList rd1 = (RadioButtonList)gvQuestion.Rows[i].FindControl("rdbChoice");
下午好,我相信问题是你没有过滤掉标题和页脚行在你的循环。在for循环中,确保检查你所在行的RowType属性是否等于DataControlRowType。我们应该:
for (int i = 0; i <= gvQuestion.Rows.Count - 1; i++)
{
if (gvQuestion.Rows[i].RowType == DataControlRowType.DataRow)
{
RadioButtonList rd1 = (RadioButtonList)gvQuestion.Rows[0].FindControl("rdbChoice");
string rd = rd1.SelectedValue.ToString();
}
}