Frage

Ich habe ein Datalist wie folgt:

<asp:DataList runat="server" ID="myDataList">
   <ItemTemplate>
     <uc:MyControl ID="id1" runat="server" PublicProperty='<%# Container.DataItem %>' />
   </ItemTemplate>
</asp:DataList>

Die Item-Vorlage ist einfach eine registrierte Usercontrol, MyControl. Die Datasource für das Datalist ist ein List<List<T>> und MyControl der Volkseigentum ist List<T> geleitet, die sie dann auf seine eigene Datenbindung peforms. Dies funktioniert gut, aber ich habe eine allgemeine Abneigung in dem aspx / c Seite Datenbindung. Was ist der efficent Weg hinter dem Volkseigentum Wert im Code zu setzen?

War es hilfreich?

Lösung

Wenn in Zeile Datenbindung Syntax für Sie nicht gut genug ist -. Sie können jederzeit in das ItemDataBound Ereignis des Datalist-Haken

<asp:DataList runat="server" ID="myDataList" 
                OnItemDataBound="DataList_ItemDataBound">
    <ItemTemplate>
        <uc:MyControl ID="id1" runat="server" />
    </ItemTemplate>
</asp:DataList>

Dann wird in dem Code hinter Ihrer Seite / enthält Steuerung können Sie Ihr ItemDataBound Ereignis hinzuzufügen.

    protected void DataList_ItemDataBound(object sender, DataListItemEventArgs e)
    {
        if (e.Item.ItemType == ListItemType.Item
            || e.Item.ItemType == ListItemType.AlternatingItem)
        { 
            DataListItem item = e.Item;
            //List<string> or whatever your data source really is...
            List<string> dataItem = item.DataItem as List<string>;
            MyControl lit = (MyControl)item.FindControl("id1");
            lit.PropertyName = dataItem;
        }
    }

Für weitere Informationen über das DataList.ItemDataBound Ereignis - Hier Lesen

Wenn Sie lieber nicht Ihre ItemDataBound Delegierten inline in der ASPX erklären könnten Sie es auch tun in der Code-behind - wahrscheinlich in Ihrer Seite Load-Ereignis:

myDataList.ItemDataBound += DataList_ItemDataBound;

Ich hoffe, das hilft

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top