我在gridview中嵌入了许多下拉列表。当我提交页面时,我循环遍历gridview的所有行,并使用findcontrol方法获取下拉列表,例如:
foreach (GridViewRow gvrItem in gvItems.Rows)
{
DropDownList ddlOption = gvrItem.Cells[2].FindControl("ddlOption") as DropDownList;
}
这很好用,但是当我尝试获取下拉列表中的所选项时,例如:
ddlOption .SelectedItem.Text
它总是返回列表中的第一项而不是实际上选择页面的内容。我有什么想法吗?
答案 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 :)