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が含まれていない場合は、それDataGridを呼び出すことができDataBind()ます。ただし、このシナリオではそれを行うことはできませんItemTemplate

誰かが回避策または代替アプローチを提案できますか?

4

2 に答える 2

1

DataGrid の Databound イベントで DropDownlist の Databinding を実行できます。

編集:私がテストした例を挙げます:

 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 に答える