【问题标题】:DataBound DropDownList in DataGrid - order of bindingDataGrid 中的 DataBound DropDownList - 绑定顺序
【发布时间】:2010-09-24 17:45:20
【问题描述】:

我有一个看起来像这样的 DataGrid(这里稍微简化了):

<asp:DataGrid ID="grdQuotas" runat="server" AutoGenerateColumns="False">
    <HeaderStyle CssClass="quotas-header" />
    <Columns>
        <asp:TemplateColumn>
            <HeaderTemplate>
                Max order level</HeaderTemplate>
            <ItemTemplate>
                <asp:DropDownList ID="ddlMaxOrderLevel" runat="server" DataSourceID="xdsOrderLevel"
                    DataTextField="Text" DataValueField="Value" SelectedValue='<%# Bind("MaxOrderLevel") %>'>
                </asp:DropDownList>
            </ItemTemplate>
        </asp:TemplateColumn>
    </Columns>
</asp:DataGrid>

<asp:XmlDataSource ID="xdsOrderLevel" runat="server" DataFile="~/App_Data/OrderLevels.xml">
</asp:XmlDataSource>

在我的Page_Load 事件处理程序中,我正在创建一个包含默认值的DataTable,并将其DataBinding 到DataGrid

问题是这发生在 之前 DropDownList ddlMaxOrderLevel 已绑定到其 DataSource,所以我收到一个运行时错误,告诉我SelectedValue 无法设置。

如果 ddlMaxOrderLevel 不在 DataGrid 中,我可以直接调用 DataBind()。但是在这种情况下我不能这样做 - 因为它在 ItemTemplate 中。

任何人都可以提出解决方法或替代方法吗?

【问题讨论】:

    标签: asp.net data-binding datagrid webforms drop-down-menu


    【解决方案1】:

    您可以在 DataGrid 的 Databound 事件中对 DropDownlist 进行数据绑定。

    编辑: 我会给你一个我测试过的例子:

     protected void dg_ItemDataBound(object sender, DataGridItemEventArgs e)
        {
            if (e.Item.ItemType != ListItemType.Header && e.Item.ItemType != ListItemType.Footer)
            {
                DropDownList dl = (DropDownList)((DataGridItem)e.Item).FindControl("ddlMaxOrderLevel");
    
                dl.DataSource = levels;
                dl.DataBind();
    
                dl.SelectedValue = ((DataRowView)e.Item.DataItem)["number"].ToString();
    
    
            }
    
        }
    

    【讨论】:

    • 不幸的是,由于我最初的问题中概述的相同原因,这不起作用:DropDownList 在 ItemTemplate 中,因此不作为您可以引用的实例化控件存在
    • 但是您可以使用 DataGridItem.FindControl 通过 ID 查找 DDL,使用 DataGridItem.DataItem 获取“MaxOrderLevel”。然后,您可以使用您当前在标记中获得的相同属性设置列表的选定值。
    • 请告诉我这是否对您有帮助,或者您是否找到了更好的答案
    【解决方案2】:

    创建另一个 DataSource 并将其绑定到 DataGrid。 SelectMethod 将在简单对象中返回默认值。

    那么所有的绑定应该可以愉快地一起工作了。

    【讨论】:

      猜你喜欢
      • 2012-02-13
      • 2012-09-04
      • 2011-01-08
      • 2012-06-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-26
      • 1970-01-01
      相关资源
      最近更新 更多