Foros del Web » Programación para mayores de 30 ;) » .NET »

Problema al enlazar Dictionary con Datalist

Estas en el tema de Problema al enlazar Dictionary con Datalist en el foro de .NET en Foros del Web. Buenas días Tengo este problema hace un día, bueno hoy recién lo estoy empezando a buscar la solución. Tengo una consulta que obtengo de un ...
  #1 (permalink)  
Antiguo 13/12/2012, 10:38
Avatar de Dradi7  
Fecha de Ingreso: junio-2008
Ubicación: Peru - Lima
Mensajes: 1.518
Antigüedad: 15 años, 10 meses
Puntos: 220
Pregunta Problema al enlazar Dictionary con Datalist

Buenas días

Tengo este problema hace un día, bueno hoy recién lo estoy empezando a buscar la solución.

Tengo una consulta que obtengo de un WebService y lo paso a un Dictionary, motivo por el cual hago esto es que necesito que el Key sea solamente un identificador y el Value sencillamente un Array de una Clase.

Este es el código de mi dictionary

Código:
Dictionary<string, Catalogo[]> lista = new Dictionary<string, Catalogo[]>();
como lo lleno no creo que vendría el caso lo unico que puedo decirles es que cada Key cuenta con un Value de un Array de 3 Clases, el problema esta al momento de enlazar a un DataList, para esto sencillamente realizo esto

Código:
catalogos.DataSource = lista;
catalogos.DataBind();
Ahora en mi ASPX para poder recorrer los valores lo hago de esta manera

Código:
<asp:DataList ID="catalogos" runat="server">
 <HeaderTemplate>
     <tr>
        <td>Key</td>
        <td>Value1</td>
        <td>Value2</td>
       <td>Value3</td>
     </tr>
</HeaderTemplate>
<ItemTemplate>
     <tr>
           <td><%# Eval("Key") %></td>
           <% 
                // <%# Eval("Key") %> ESTO ME RETORNA UN TEXTO DE ESTE TIPO "CATALOGO[]"
                // ACA QUIERO REALIZAR UN FOREACH DEL VALUE PERO NO SE COMO HACERLO
            %>
     </tr>
</ItemTemplate>
</asp:DataList>
De aca no se como hacer para que pueda recorrer el array que esta dentro del Value del Dictionary y poder mostrarlo en el Datalist, si conocen otra solución de como puedo hacerlo estaré realmente agradecido.

Saludos
__________________
La clave de todo triunfador es eliminar todas sus excusas y sus limitaciones
  #2 (permalink)  
Antiguo 13/12/2012, 11:09
Avatar de Dradi7  
Fecha de Ingreso: junio-2008
Ubicación: Peru - Lima
Mensajes: 1.518
Antigüedad: 15 años, 10 meses
Puntos: 220
Respuesta: Problema al enlazar Dictionary con Datalist

Bueno

Me auto respondo ya lo resolví si alguno tiene el mismo problema paso la solución

Primero para recorrer el Value del Dictionary pueden usar un Control Repeater por ejemplo y para poder enlazarlo con el respectivo Valor deben usar el evento ItemDataBound

Código:
protected void catalogos_ItemDataBound(object sender, DataListItemEventArgs e)
        {
            // se valida que sea de tipo item o item alternativo
            if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
            {
                // buscamos nuestro control repeater
                Repeater r = (Repeater)e.Item.FindControl("repeat");
                // recuperamos el valor del DataItem y lo convertimos en un objeto de tipo KeyValuePair (Key y Value)
                System.Collections.Generic.KeyValuePair<string, cb.Catalogo[]> kv = (System.Collections.Generic.KeyValuePair<string, cb.Catalogo[]>)e.Item.DataItem;
                // Como el value es una lista o array lo enlazamos directamente al repeater y listo
                r.DataSource = kv.Value;
                r.DataBind();
            }
        }
En tu ASPX seria algo como esto

Código:
<asp:DataList ID="catalogos" runat="server">
 <HeaderTemplate>
     <tr>
        <td>Key</td>
        <td>Value1</td>
        <td>Value2</td>
       <td>Value3</td>
     </tr>
</HeaderTemplate>
<ItemTemplate>
     <tr>
           <td><%# Eval("Key") %></td>
           <asp:Repeater ID="repeat" runat="server">
                        <ItemTemplate>
                            <td>
                                <%# Eval("NombreCampo") %>
                            </td>
                        </ItemTemplate>
                    </asp:Repeater>
     </tr>
</ItemTemplate>
</asp:DataList>
Saludos
__________________
La clave de todo triunfador es eliminar todas sus excusas y sus limitaciones

Etiquetas: datalist, enlazar, server
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 01:31.