0

我有一个看起来像这样的 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包含默认值并将DataBind其添加到DataGrid.

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

如果ddlMaxOrderLevel不在 aDataGrid我可以调用DataBind()它。但是,在这种情况下我不能这样做 - 因为它位于ItemTemplate.

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

4

2 回答 2

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();


        }

    }
于 2008-12-01T12:14:13.457 回答
0

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

然后所有的绑定应该愉快地一起工作。

于 2009-02-09T14:09:38.317 回答