none
Mostrar datos en gridview

    Pregunta

  • Hola, necesito que me ayuden.. tengo un gridview el cuál quiero mostrar ciertos datos desde una consulta.
    El problema es que no se como hacer lo siguiente:
    Necesito que una columna, se llame por ejemplo "Orden", la cuál tiene que tener dos campos de la consulta, es decir, en mi consulta tengo:
    select idOrden as Orden1, NomOrden as Orden2.... entonces necesito mostrar en esa columna "Orden" los valores "Orden1 - Orden2"... como hago eso?... esper me puedan ayudar, muchas gracias!
    jueves, 16 de abril de 2009 12:41

Respuestas

  • Hola,

    Otra opción que tienes es obtener la columna compuesta desde la propia consulta de SQL, haciendo algo del estilo

    SELECT CONVERT(VARCHAR(10),idOrden) + ' - ' + NomOrden AS OrdenCompuesta

    FROM...

    He supuesto que usas SQL Server, y que idOrden es un campo numerico, y por este motivo lo he convertido a un "string", que en SQL es un tipo de datos llamado VARCHAR.

    Si usas otra BBDD puedes buscar sintaxis similares, ya que el concepto es aplicable a cualquier gesto de bases de datos.

    Espero que te sirva.

    Saludos.

    Ferran

    • Marcado como respuesta Phoenix_uy jueves, 16 de abril de 2009 16:55
    jueves, 16 de abril de 2009 16:07

Todas las respuestas

  • puedes convertir cualquier columna del gridview en template (editar columnas-->seleccionas la columna-->abajo aparece convertir este campo en item template o algo asi). Una vez convertido en plantilla le das click derecho al grid-->editar plantillas, y te aparecera ese campo, lo seleccionas y aparece la columna sola para editar, alli puedes ingresar una gran cantidad de controles, puedes ingresar por ejemplo 2 textBox, y asignarles la propiedad text asi (en el codigo html):

    Text

     

    ='<%# Bind("nombre") %>'



    O con el asistente tambien lo puedes hacer, pues cuando arrastras el control, en la parte superior derecha de este aparece una opcion que dice "editar dataBindings" y alli pones la expresion : Bind("nombre")
    jueves, 16 de abril de 2009 13:35
  • Hola,

    Otra opción que tienes es obtener la columna compuesta desde la propia consulta de SQL, haciendo algo del estilo

    SELECT CONVERT(VARCHAR(10),idOrden) + ' - ' + NomOrden AS OrdenCompuesta

    FROM...

    He supuesto que usas SQL Server, y que idOrden es un campo numerico, y por este motivo lo he convertido a un "string", que en SQL es un tipo de datos llamado VARCHAR.

    Si usas otra BBDD puedes buscar sintaxis similares, ya que el concepto es aplicable a cualquier gesto de bases de datos.

    Espero que te sirva.

    Saludos.

    Ferran

    • Marcado como respuesta Phoenix_uy jueves, 16 de abril de 2009 16:55
    jueves, 16 de abril de 2009 16:07
  • Hola, gracias por responder, ya lo hice! Pero tengo un problema, no puedo ordenar.. les muestro el código del gridview:
    <asp:GridView ID="GridView1" 
                          runat="server" 
                          AllowPaging="True" 
                          AllowSorting="True"
                          AutoGenerateColumns="false"
                          OnPageIndexChanging="GridView1_PageIndexChanging"
                          OnSorting="GridView1_Sorting"
                          EnableViewState="true"
                          CssClass="GridViewStyle" >
                          <Columns>
                            <asp:BoundField DataField="Orden1" HeaderText="Orden1" visible="false"/>
                            <asp:BoundField DataField="Orden2" HeaderText="Orden2" visible="false"/>
                            <asp:TemplateField HeaderText="Orden" SortExpression="Orden1">
                                <ItemTemplate>
                                    <asp:Label ID="Label1" runat="server" >
                                        <%# Eval("Orden1") + " - " + Eval("Orden2")%>
                                    </asp:Label>                       
                                </ItemTemplate>
                            </asp:TemplateField>
                            <asp:BoundField DataField="ProvName" HeaderText="ProvName" visible="false"/>
                            <asp:BoundField DataField="ProvLastName" HeaderText="ProvLastName" Visible="false" />
                            <asp:TemplateField HeaderText="Proveedor" SortExpression="ProvName">
                                <ItemTemplate>
                                    <asp:Label ID="Label2" runat="server" >
                                        <%# Eval("ProvName") + ", " + Eval("ProvLastName") %>
                                    </asp:Label>                       
                                </ItemTemplate>
                            </asp:TemplateField>
                            <asp:BoundField DataField="DeliveryDate" HeaderText="DeliveryDate" visible="false"/>
                            <asp:TemplateField HeaderText="Fecha de entrega" SortExpression="DeliveryDate">
                                <ItemTemplate>
                                    <asp:Label ID="Label3" runat="server" >
                                        <%# Eval("DeliveryDate") %>
                                    </asp:Label>                       
                                </ItemTemplate>
                            </asp:TemplateField>
                            <asp:BoundField DataField="RecipientName" HeaderText="RecipientName" visible="false"/>
                            <asp:BoundField DataField="RecipientLastName" HeaderText="RecipientLastName" Visible="false" />
                            <asp:BoundField DataField="RecipientEMail" HeaderText="RecipientEMail" Visible="false" />
                            <asp:TemplateField HeaderText="Recipient" SortExpression="RecipientName">
                                <ItemTemplate>
                                    <asp:Label ID="Label3" runat="server" >
                                        <%# Eval("RecipientName") + ", " + Eval("RecipientLastName") + " - Email: " + Eval("RecipientEMail") %>
                                    </asp:Label>                       
                                </ItemTemplate>
                            </asp:TemplateField>
                            <asp:BoundField DataField="Price1" HeaderText="Price1" visible="false"/>
                            <asp:BoundField DataField="Price2" HeaderText="Price2" Visible="false" />
                            <asp:BoundField DataField="Price3" HeaderText="Price3" Visible="false" />
                            <asp:BoundField DataField="PriceTotal" HeaderText="PriceTotal" Visible="false" />
                            <asp:TemplateField HeaderText="Precio" SortExpression="PriceTotal">
                                <ItemTemplate>
                                    <asp:Label ID="Label3" runat="server" >
                                        <%# "Price: " + Eval("Price1") + ", Shipping: " + Eval("Price2") + ", Total Gifts: " + Eval("Price3") + " - Total: " + Eval("PriceTotal") %>
                                    </asp:Label>                       
                                </ItemTemplate>
                            </asp:TemplateField>
                            <asp:BoundField DataField="Country" HeaderText="Country" Visible="false" />
                            <asp:TemplateField HeaderText="País de entrega" SortExpression="Country">
                                <ItemTemplate>
                                    <asp:Label ID="Label3" runat="server" >
                                        <%# Eval("Country") %>
                                    </asp:Label>                       
                                </ItemTemplate>
                            </asp:TemplateField>
                </Columns>
                <RowStyle CssClass="RowStyle" />
                <PagerStyle CssClass="PagerStyle" />
                <SelectedRowStyle CssClass="SelectedRowStyle" />
                <HeaderStyle CssClass="HeaderStyle" />
                <EditRowStyle CssClass="EditRowStyle" />
                <AlternatingRowStyle CssClass="AltRowStyle" /> 
            </asp:GridView>
    Y ahora lo que tengo en el code behind:

    private string ConvertSortDirectionToSql(SortDirection sortDirection)
            {
                string newSortDirection = String.Empty;
    
                switch (sortDirection)
                {
                    case SortDirection.Ascending:
                        newSortDirection = "ASC";
                        break;
    
                    case SortDirection.Descending:
                        newSortDirection = "DESC";
                        break;
                }
    
                return newSortDirection;
            }
            protected void GridView1_Sorting(object sender, System.Web.UI.WebControls.GridViewSortEventArgs e)
            {
                DataSet oSet = (DataSet)Session["Datos"];
                DataTable dataTable = oSet.Tables[0] as DataTable;
    
                if (dataTable != null)
                {
                    DataView dataView = new DataView(dataTable);
                    dataView.Sort = e.SortExpression + " " + ConvertSortDirectionToSql(e.SortDirection);
    
                    GridView1.DataSource = dataView;
                    GridView1.DataBind();
                }
            }
    Lo que me pasa es que puedo hacer click en los links que se forman en el nombre de las columnas, y me lo ordena, de forma ascendiente, pero no logro hacer que ordene descendiente, es decir, yo pensé que haciendo click de nuevo lo ordenaba descendiente, pero no, no hace eso, lo vuelve a ordenar ascendiente.. también me gustaría agregarle una imágen en forma de flechita arriba y flechita abajo que cambie cuándo quiero ordenar, como hago eso?

    Espero me ayuden, gracias!

    jueves, 16 de abril de 2009 16:53