无法捕获网格中的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 SelectedValue

你的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();
      }
 }