Ligação de dados uma lista para um controle de usuário em um modelo de item por trás do código

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

Pergunta

Eu tenho um DataList como abaixo:

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

O modelo de item é simplesmente um usercontrol registrado, MyControl. A fonte de dados para o DataList é um List<List<T>> e bens públicos de MyControl é passado List<T> que então peforms sua própria ligação de dados on. Esta multa funciona, mas eu tenho uma aversão geral para ligação de dados na página aspx / c. Qual é a maneira mais eficiente para definir o valor bens públicos no trás código?

Foi útil?

Solução

Se em dados da linha sintaxe de ligação não é bom o suficiente para você -. Você sempre pode ligar para o evento ItemDataBound do DataList

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

Em seguida, no código por trás de sua página / contendo controle que você pode adicionar seu 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;
        }
    }

Para obter mais informações sobre o evento DataList.ItemDataBound - Leia aqui

Se você prefere não declarar o seu delegado em linha ItemDataBound na ASPX você também pode fazê-lo no código por trás - provavelmente em seu evento de carga página:

myDataList.ItemDataBound += DataList_ItemDataBound;

Espero que ajude

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top