【问题标题】:Using DropDownList in EditTemplates of a GridView在 GridView 的 EditTemplates 中使用 DropDownList
【发布时间】:2010-03-08 15:16:54
【问题描述】:

我正在使用 Asp.Net 中的 GridView。当最初加载页面时,我的 gridview 看起来像: alt text http://www.freeimagehosting.net/uploads/e45e5b66d4.jpg

当用户单击编辑行时,我使用编辑模板在 DropDownList 中显示“域”。但问题是,当 DropDownlist 加载数据时,它会丢失“域”的当前值。
如果我想编辑第 4 行,其域当前设置为 'Computers' 正在更改为 'MBA',这当然是 DataSource 返回的第一个元素。 alt text http://www.freeimagehosting.net/uploads/7d3f6ba9a5.jpg


我想将当前值(“计算机”)显示为 DropDownList 中的选定值。但我无法获取正在编辑的 Domain 的值。

【问题讨论】:

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


    【解决方案1】:

    要解决异常,请使用 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>
    

    【讨论】:

    • @Saar 谢谢,它对我有用,但我必须将 DomainId 作为 SelectedValue。:)
    【解决方案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。

    【讨论】:

    • 是的,我试过了,但有一个异常,当前值不存在于列表中。怎么办。
    • 在代码中处理它是唯一的其他解决方案。将在上面进行编辑。
    【解决方案3】:

    这可能会对您有所帮助:

    监听 RowEditing 事件,使用 .FindControl() 方法获取特定行的 Dropdownlist 并在 DDL 上执行显式 .DataBind()。

    【讨论】:

      猜你喜欢
      • 2011-09-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多