2011-12-12 45 views
0

我有:无法赶上单选按钮列表里面的SelectedValue电网

<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.什么是我的错?

回答

2

您的单选按钮列表的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不递归考虑孩子的容器,它只能搜索给定ID当前NamingContainer 。

+0

谢谢lot.Its做工perfectly.Waiting一时接受答:) –

0

使用此查找单选按钮列表:

RadioButtonList rd1 = (RadioButtonList)gvQuestion.Rows[i].Cells[<index>].FindControl("rdbChoice"); 

替换为细胞数的指标参考,并直接在单元格中找到。或者有时候这工作,但我已经没有多少运气找到在行级:

RadioButtonList rd1 = (RadioButtonList)gvQuestion.Rows[i].FindControl("rdbChoice"); 
0

下午好,我认为,问题是,你是不是在你的for循环过滤掉页眉和页脚行。里面的你的for循环确保您检查该行的行类型物业,你是对是等于DataControlRowType.DataRow:

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(); 
     } 
} 
+0

-1否,GridView的Row-Collection只包含RowType == DataRow的行。 http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.gridview.rows.aspx如果你处理f.e. RowDataBound事件,您还必须处理其他RowType。 –