Liaison de données d'une liste à un contrôle utilisateur dans un modèle d'élément dans le code derrière

StackOverflow https://stackoverflow.com/questions/1207147

Question

J'ai un DataList comme ci-dessous:

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

Le modèle d'élément est simplement un contrôle utilisateur enregistré, MyControl. La source de données pour la liste de données est List<List<T>> et PublicProperty de MyControl est transmis List<T> sur lequel il effectue ensuite sa propre liaison de données. Cela fonctionne bien, mais j'ai une aversion générale pour la liaison de données dans la page aspx / c. Quel est le moyen le plus efficace de définir la valeur PublicProperty dans le code derrière?

Était-ce utile?

La solution

Si la syntaxe de liaison de données en ligne ne vous convient pas - vous pouvez toujours vous connecter à l'événement ItemDatabound de DataList.

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

Ensuite, dans le code situé derrière votre contrôle de page / contenant, vous pouvez ajouter votre événement 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;
        }
    }

Pour plus d'informations sur l'événement DataList.ItemDataBound - à lire ici

Si vous préférez ne pas déclarer votre délégué ItemDataBound en ligne dans ASPX, vous pouvez également le faire dans le code suivant - probablement dans votre événement Page Load:

myDataList.ItemDataBound += DataList_ItemDataBound;

L’espoir que cela aide

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top