DataBound DropDownList in DataGrid - Reihenfolge der Bindung

Ich habe ein DataGrid, das so aussieht (hier leicht vereinfacht):

<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>

In meinem Page_Load event handler I am creating a Ereignishandler erstelle ich ein DataTable containing default values and mit Standardwerten und DataBinding it to the und ingt es zum DataGrid. .

Das Problem ist, dass dies vor stattfindet, bevor DropDownList ddlMaxOrderLevel an seine DataSource, so I get a runtime error telling me that the gebunden wurde, so dass ich einen Laufzeitfehler bekomme, der mir sagt, dass das SelectedValue cannot be set. nicht eingestellt werden kann.

Wenn ddlMaxOrderLevel nicht in einem DataGrid I could just call war, könnte ich einfach DataBind() on it. However I cannot do that in this scenario - since it is in an darauf aufrufen. Allerdings kann ich das in diesem Szenario nicht tun - da es sich in einem ItemTemplate. befindet.

Kann jemand eine Problemumgehung oder einen alternativen Ansatz vorschlagen?

Antwort auf "DataBound DropDownList in DataGrid - Reihenfolge der Bindung " 2 von antworten

Sie können die Datenbindung der DropDownlist im Databound-Ereignis des DataGrid tun.

Bearbeiten: Ich werde Ihnen ein Beispiel geben, das ich getestet habe:

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


        }

    }

Erstellen Sie eine weitere DataSource und binden Sie sie an das DataGrid. Wobei die SelectMethod die Standardwerte in einem einfachen Objekt zurückgeben würde.

Dann sollte die ganze Bindung gerne zusammenarbeiten.