DropDownList使用FindControl时选择的项不正确

时间:2010-02-10 15:03:19

标签: c# asp.net

我在gridview中嵌入了许多下拉列表。当我提交页面时,我循环遍历gridview的所有行,并使用findcontrol方法获取下拉列表,例如:

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

这很好用,但是当我尝试获取下拉列表中的所选项时,例如:

ddlOption .SelectedItem.Text

它总是返回列表中的第一项而不是实际上选择页面的内容。我有什么想法吗?

2 个答案:

答案 0 :(得分:1)

您需要在GridView数据绑定后执行此操作。尝试在DataBound事件中调用它:

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;
}

答案 1 :(得分:0)

原来是.Net的怪癖,如果用ListItem填充下拉列表,它就不会将这些项带入ViewState。如果您使用字符串填充下拉列表,它将。很奇怪,我知道。

e.g:

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