Domanda

Ho un DataList come di seguito:

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

Il modello di articolo è semplicemente un controllo utente registrato, MyControl. DataSource per DataList è un List<List<T>> e PublicProperty di MyControl viene passato List<T> sul quale esegue il proprio database. Funziona benissimo, ma ho una generale avversione per il databinding nella pagina aspx / c. Qual è il modo più efficace per impostare il valore di PublicProperty nel codice sottostante?

È stato utile?

Soluzione

Se la sintassi dell'associazione dati in linea non è abbastanza buona per te, puoi sempre collegarti all'evento ItemDatabound del DataList.

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

Quindi, nel codice dietro la tua pagina / contenente il controllo puoi aggiungere il tuo evento ItemDataBound.

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

Per ulteriori informazioni sull'evento DataList.ItemDataBound - Leggi qui

Se preferisci non dichiarare il tuo delegato ItemDataBound in linea nell'ASPX, puoi farlo anche nel codice sottostante, probabilmente nell'evento Caricamento pagina:

myDataList.ItemDataBound += DataList_ItemDataBound;

Spero che aiuti

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top