2011-12-12 46 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。 –