2010-02-10 34 views
0

我有一些嵌入在gridview中的下拉列表。當我通過GridView的所有行提交頁面我環路和使用FindControl方法來獲取下拉列表例如:使用FindControl時DropDownList選擇的項目不正確

foreach (GridViewRow gvrItem in gvItems.Rows) 
{  
    DropDownList ddlOption = gvrItem.Cells[2].FindControl("ddlOption") as DropDownList; 
} 

這工作得很好,但是當我試圖讓下拉列表例如選擇的項目:

ddlOption .SelectedItem.Text 

它總是返回列表中的第一項,而不是實際選擇頁面的內容。任何想法我做錯了什麼?

回答

0

它竟然是淨的一個怪癖,如果您填寫的下拉與列表項的將不攜帶這些物品進入ViewState的列表。如果你用字符串填充下拉列表,它會。我知道很奇怪。

例如爲:

DropDownList ddl = new DropDownList(); 
ddl.Add(new ListItem("text", "value")); <----Fails :(
ddl.Add("text"); <---- Works :) 
1

您需要在GridView數據綁定後執行此操作。嘗試調用它在數據綁定事件:

protected void GridView1_DataBound(object sender, EventArgs e) 
{ 
    foreach (GridViewRow gvrItem in gvItems.Rows) 
    {  
     DropDownList ddlOption = gvrItem.Cells[2].FindControl("ddlOption") as DropDownList; 
    } 
    string selectedItem = ddlOption.SelectedItem.Text; 
} 
+0

OO是回發後做的 - 應該沒有必要重新綁定的GridView,只要'EnableViewState'設置爲TRUE;。 – 2010-02-10 15:09:47

+0

他並不是說需要重新綁定gridview。他是在說,下拉式訪問的時間點可能不是最好的。在gridview被數據綁定之後,嘗試訪問所選值可能是更好的時機。 – AGoodDisplayName 2010-02-10 15:18:04

+0

我已經這樣做了,單擊一個按鈕並且首先運行page_init方法(此數據綁定gridview並動態地將下拉列表添加到gridview中)。之後,按鈕方法會在上面的代碼運行時運行。瘋狂的事情是,我已經在一個單獨的頁面上做了類似的事情。我努力看到兩者中的不同 – 2010-02-10 16:43:56

相關問題