Vincular datos de una lista a un control de usuario en una plantilla de elemento en código subyacente

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

Pregunta

Tengo una lista de datos como la siguiente:

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

La plantilla de elemento es simplemente un control de usuario registrado, MyControl.El origen de datos para la lista de datos es un List<List<T>> y se pasa la propiedad pública de MyControl List<T> sobre el que luego realiza su propio enlace de datos.Esto funciona bien, pero tengo una aversión general al enlace de datos en la página aspx/c.¿Cuál es la forma más eficiente de establecer el valor de PublicProperty en el código subyacente?

¿Fue útil?

Solución

Si la sintaxis de enlace de datos en línea no es lo suficientemente buena para usted, siempre puede conectarse al evento ItemDatabound de DataList.

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

Luego, en el código detrás de su página / control que contiene, puede agregar su 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 obtener más información sobre el evento DataList.ItemDataBound - Leer aquí

Si prefiere no declarar su delegado ItemDataBound en línea en el ASPX, también puede hacerlo en el código que se encuentra detrás, probablemente en su evento de carga de página:

myDataList.ItemDataBound += DataList_ItemDataBound;

Espero que ayude

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top