2010-02-10 31 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

相关问题