【发布时间】:2014-05-21 16:10:10
【问题描述】:
在我的 Gridview 中,我有以下模板字段:
<asp:TemplateField HeaderText="Dept Code" SortExpression="DeptCode">
<ItemTemplate>
<%# Eval("DeptCode") %>
</ItemTemplate>
<EditItemTemplate>
<asp:DropDownList ID="ddlDeptCode" runat="server"
SelectedValue='<%# Eval("DeptCode") %>'
DataSource='<%# GetAllDepartments() %>'
DataTextField="DeptCode"
DataValueField="DeptCode" />
</EditItemTemplate>
</asp:TemplateField>
当我在一行上单击编辑时,这非常有用,它会使用所有值填充 DropDownList 并为该行选择正确的值。
但是,当我尝试更新该行时:OnRowUpdating="UpdateRow"
protected void UpdateRow(object sender, GridViewUpdateEventArgs e)
{
GridViewRow row = UserGV.Rows[e.RowIndex];
DropDownList ddl = row.FindControl("ddlDeptCode") as DropDownList;
string deptCode = ddl.SelectedValue;
}
它找到了 DropDownList 控件,但 SelectedValue 始终为空字符串。
我需要访问所选值以保存到数据库。
关于如何在后面的代码中获取 Gridview 中 DropDownList 的 SelectedValue 的任何想法?
编辑:
您还可以从后面的代码中填充 DropDownList 和 SelectedValue:
protected void gv_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
if ((e.Row.RowState & DataControlRowState.Edit) > 0)
{
var deptMgr = new DepartmentMgr();
List<Department> departments = deptMgr.GetAllDepartments();
DropDownList ddList = (DropDownList)e.Row.FindControl("ddlDeptCode");
ddList.DataSource = departments;
ddList.DataTextField = "DeptCode";
ddList.DataValueField = "DeptCode";
ddList.DataBind();
string userDeptCode = DataBinder.Eval(e.Row.DataItem, "DeptCode").ToString();
ddList.SelectedItem.Text = userDeptCode;
ddList.SelectedValue = userDeptCode;
}
}
}
【问题讨论】:
-
您是从同一个 gridview 表还是另一个表中填充下拉列表?
-
我明白了,因为我用 xml 创建了一个简单的数据库并创建了两个表,然后完全尝试了您的代码,它工作正常并正确显示值,所以我不确定是什么问题,但我会上传我做的简单项目,也许你能弄清楚。
-
我仍然怀疑您的问题出在数据库值而不是下拉列表的设计和访问中,无论如何请从这里下载示例:docs.google.com/file/d/0B5Xsv2VzgUv0aHlmaXVrRmVydUE/edit希望对您有所帮助。
-
好的,等待更新。
-
是的,你现在知道这个问题真的很奇怪,但很好,至于添加第二个标题的替代方法,我已经在这里使用这种方法codeproject.com/Articles/249155/…,只需复制 RowCreated 和 AddMergedCell方法并修改它们以满足您的需求。我现在得走了,但我希望你能解决这个问题,继续前进,伙计。
标签: c# asp.net gridview selectedvalue edititemtemplate