none
Rellenar gridView con consulta Linq de dos tablas relacionadas RRS feed

  • Pregunta

  • Hola,

    Tengo el siguiente gridView:

    <asp:GridView ID="grdUsuarios" runat="server" AllowSorting="True" AutoGenerateColumns="False"
                                CellPadding="4" ForeColor="#333333" GridLines="None" OnRowEditing="grdUsuarios_RowEditing"
                                DataKeyNames="ID_Usuario" EnableSortingAndPagingCallbacks="True" OnRowDeleting="grdUsuarios_RowDeleting"
                                OnRowCommand="grdUsuarios_RowCommand" CssClass="gridView" Width="97%">
                                <RowStyle BackColor="#EFF3FB" />
                                <Columns>
                                    <asp:BoundField DataField="Nombre" HeaderText="Nombre" SortExpression="Nombre" HeaderStyle-CssClass="enlaceHeader" />
                                    <asp:BoundField DataField="Apellidos" HeaderText="Teléfono" SortExpression="Apellidos" />
                                    <asp:BoundField DataField="Login" HeaderText="Login" />                                                             
                                    <asp:TemplateField HeaderText="Rol">                               
                                        <ItemTemplate>
                                            <%# Eval("Roles.Rol") %></ItemTemplate>
                                    </asp:TemplateField>
                                    <asp:BoundField DataField="Telefono" HeaderText="Teléfono" />
                                    <asp:BoundField DataField="Email" HeaderText="Email" />
                                    <asp:TemplateField ItemStyle-Width="5%">
                                        <ItemTemplate>
                                            <asp:LinkButton ID="linkEditar" runat="server" CommandName="Edit" ToolTip="Editar obra">Editar</asp:LinkButton>
                                        </ItemTemplate>
                                    </asp:TemplateField>
                                    <asp:TemplateField ItemStyle-Width="5%">
                                        <ItemTemplate>
                                            <asp:LinkButton ID="linkEliminar" runat="server" ToolTip="Eliminar obra" OnClientClick="return confirm('¿Esta seguro que quiere eliminar esta obra?');"
                                                CommandName="Delete">Eliminar</asp:LinkButton>
                                        </ItemTemplate>
                                    </asp:TemplateField>
                                </Columns>
                                <EmptyDataTemplate>
                                    <table width="100%" style="text-align: center">
                                        <tr>
                                            <td>
                                                <asp:Label ID="lblTemplate" runat="server" Text="No existen obras para el cliente seleccionado." />
                                            </td>
                                        </tr>
                                    </table>
                                </EmptyDataTemplate>
                                <FooterStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />
                                <PagerStyle BackColor="White" ForeColor="Black" HorizontalAlign="Center" />
                                <SelectedRowStyle BackColor="#D1DDF1" Font-Bold="True" ForeColor="#333333" />
                                <HeaderStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />
                                <EditRowStyle BackColor="#2461BF" />
                                <AlternatingRowStyle BackColor="White" />
                            </asp:GridView>

     

    Y en el page_load lo inicializo de la siguiente manera:

                        List<Usuarios> u = opUsuarios.GetUsuariosConRoles();                   
                        grdUsuarios.DataSource = u;
                        grdUsuarios.DataBind();

    La función es la siguiente:

    public List<Usuarios> GetUsuariosConRoles()
            {
                try
                {
                    using (Entidades context = new Entidades())
                    {
                        var q = (from usuario in context.Usuarios.Include("Roles")
                                 select usuario).ToList();

                        return q;                   
                    }               
                }
                catch (Exception ex)
                {
                    throw ex;
                }
            }

    Mi duda es que no se cómo mostrar el nombre del Rol, que sería Roles.Rol en el gridView. La columna la he puesto así:

    <asp:TemplateField HeaderText="Rol">                               
          <ItemTemplate>
                 <%# Eval("Roles.Rol") %></ItemTemplate>
    </asp:TemplateField>

    pero me da error. ¿Hay alguna manera de poder mostrar ese dato sin cambiar la consulta Linq?

    Espero vuestra ayuda.

    Muchas gracias.

    Saludos.

     

    miércoles, 16 de noviembre de 2011 12:18

Todas las respuestas

  • Probablemente la relación está definida como "de uno a muchos", con lo que cada usuario puede tener múltiples roles, al menos desde el punto de vista de la consulta LINQ, aunque tue reglas de negocio sólo permitan introducir un único rol.

    Para extraer el primer rol en el Eval, prueba así:

    Eval("Roles.First().Rol")

     

    lunes, 21 de noviembre de 2011 14:23