在GridView的EditTemplates中使用DropDownList

时间:2010-03-08 15:16:55

标签: c# .net asp.net gridview drop-down-menu

我正在使用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的值。

3 个答案:

答案 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()。