我正在使用Asp.Net中的GridView。最初是Page Loads时,我的gridview看起来像: alt text http://www.freeimagehosting.net/uploads/e45e5b66d4.jpg
当用户点击,编辑一行时,我正在使用编辑模板在DropDownList中显示“域”。但问题是,当DropDownlist加载数据时,它会丢失“域”的当前值 即如果我要修改第4行,其当前设置为'计算机'的域名将更改为'MBA',这是当然的DataSource返回的第一个元素。 alt text http://www.freeimagehosting.net/uploads/7d3f6ba9a5.jpg
我想在DropDownList中显示当前值('computers')作为选定值。但是我无法获得正在编辑的Domain的值。
答案 0 :(得分:2)
您可以绑定下拉列表的SelectedValue属性,如下所示:
SelectedValue='<%# Eval("Domain") %>'
但是,如果绑定不存在的值,则会引发异常。因此,您可能需要根据您的方案处理代码。
编辑:如果该值不存在,则不幸的剩余解决方案将进入gridview的RowDataBound并获取对下拉的引用,并执行:
MyBoundObject obj = (MyBoundObject)e.Row.DataItem;
DropDownList ddl = (DropDownList)e.Row.Cells[<index>].FindControl("ddl1");
ListItem item = ddl.Items.FindByValue(obj.Domain);
if (item != null) item.Selected = true;
此处,仅当列表项存在时才会选中它。如果没有选择项目,请尝试ddl.SelectedValue = item.Value。
HTH。
答案 1 :(得分:2)
解决异常使用AppendDataBoundItems =“true”。
<asp:DropDownList ID="ddlCategory" runat="server" SelectedValue='<%# Eval("Domain") %>'
DataSourceID="datasource"
DataTextField="text" DataValueField="value" AppendDataBoundItems="true">
<asp:ListItem Text="Select..." Value=""></asp:ListItem>
</asp:DropDownList>
答案 2 :(得分:0)
这可能会对您有所帮助:
监听事件RowEditing,使用.FindControl()方法获取特定行的Dropdownlist,并在DDL上执行显式的.DataBind()。