en

MSGuayaquil

Recursos esenciales para el desarrollador .NET

Ordenar columna en DataGridView

Último post 06-09-2007 3:52 AM escrito por lineared. 3 respuestas.
Página 1 de 1 (4 elementos)
Ordenar mensajes: Anterior Siguiente
  • 05-05-2006 1:48 PM

    Ordenar columna en DataGridView

    Amigos:

    Alguno de ustedes tiene un ejemplo de como ordenar el gridView seleccionando (click) en una de sus columnas sea ascendente/descendente.

     

    Saludos

    • Puntos de post: 0
  • 05-05-2006 5:19 PM en respuesta a

    • jterrano
    • Contribuyente Top 10
    • Se unió el 04-22-2007
    • Envíos: 62
    • Puntos: 130

    Re: Ordenar columna en DataGridView

    Roberto el DataGridView tiene una propiedad llamada AllowUserToOrderColumns, simplemente colocalo a True y con ello tienes el ordenamiento dependiendo en que columna el usuario haga click.

    Te recomiendo un libro gratuito de Visual Basic 2005

     

    Saludos

    • Puntos de post: 0
  • 05-05-2006 7:46 PM en respuesta a

    • Julio Casal
    • Contribuyente Top 10
    • Se unió el 04-22-2007
    • Guayaquil
    • Envíos: 401
    • Puntos: 18,415

    Re: Ordenar columna en DataGridView

    Complementando el post de José, te comento que cada columna del DataGridView tiene una propiedad llamada "SortMode". Basta con que a dicha propiedad le des el valor de "Automatic" (que es el default) y la columna podrá ser ordenada ascendente o descendentemente ante el click que dé el usuario sobre el header de la misma.

    Para acceder a esta propiedad, abre tu formulario en el diseñador de Windows, dale click derecho a tu datagridview y selecciona "Edit Columns...". En la pantalla que se abre, selecciona la columna que a la que deseas darle esta habilidad y al lado derecho, en SortMode, selecciona "Automatic". Con eso bastará.

    Saludos,

    Julio

    Julio Casal
    http://msguayaquil.com/blogs/julioc
    • Puntos de post: 0
  • 06-09-2007 3:52 AM en respuesta a

    • lineared
    • Contribuyente Top 200
    • Se unió el 06-09-2007
    • Envíos: 1
    • Puntos: 0

    Re: Ordenar columna en DataGridView

    Aqui dejo un ejemplo. Trabaja con access. Las dos soluciones funcionan pero una bien y otra mal:

    http://82.158.36.197/Toptencopia1/topten.aspx trabaja con los registros filtrados del usuario

    WHERE usuario='<%Session.SessionID%>' , pero al click sobre la columna no ordena.

    http://82.158.36.197/Toptencopia2/topten.aspx trabaja sin filtrar pero en cambio funciona la ordenacion al hacer click en la columna.

    <asp:GridView ID="CustomersGridView" runat="server" AutoGenerateColumns="False"

    DataSourceID="AccessDataSource1" Width="688px" AllowSorting="True"

    onrowcreated="CustomersGridView_RowCreated" Font-Size="XX-Small" >

    <AlternatingRowStyle BackColor="#E5E5E5" />

    <HeaderStyle BackColor="#304E78" Font-Bold="True" ForeColor="White" />

    <Columns>

    <asp:BoundField HtmlEncode="False" DataField="url" HeaderText="Url" SortExpression="url">

    <ItemStyle Width="150px" CssClass="mio09" Wrap="True" Font-Names="Tahoma" Font-Size="XX-Small" />

    <HeaderStyle Font-Size="XX-Small" ForeColor="White" HorizontalAlign="Center" Width="150px" BorderStyle="Inset" />

    </asp:BoundField>

    <asp:BoundField HtmlEncode="False" DataField="googlecom" HeaderText="GG1" SortExpression="googlecom">

    <ItemStyle Width="30px" CssClass="mio09" />

    <HeaderStyle Font-Size="XX-Small" ForeColor="White" HorizontalAlign="Center" Width="60px" BorderStyle="Inset" />

    </asp:BoundField>

    <asp:BoundField HtmlEncode="False" DataField="googlees" HeaderText="GG2" SortExpression="googlees">

    <ItemStyle Width="30px" CssClass="mio09" />

    <HeaderStyle Font-Size="XX-Small" ForeColor="White" HorizontalAlign="Center" Width="60px" BorderStyle="Inset" />

    </asp:BoundField>

    <asp:BoundField HtmlEncode="False" DataField="msncom" HeaderText="MS1" SortExpression="msncom">

    <ItemStyle Width="30px" CssClass="mio09" />

    <HeaderStyle Font-Size="XX-Small" ForeColor="White" HorizontalAlign="Center" Width="60px" BorderStyle="Inset" />

    </asp:BoundField>

    <asp:BoundField HtmlEncode="False" DataField="msnes" HeaderText="MS2" SortExpression="msnes">

    <ItemStyle Width="30px" CssClass="mio09" />

    <HeaderStyle Font-Size="XX-Small" ForeColor="White" HorizontalAlign="Center" Width="60px" BorderStyle="Inset" />

    </asp:BoundField>

    <asp:BoundField HtmlEncode="False" DataField="yahoocom" HeaderText="YH1" SortExpression="yahoocom">

    <ItemStyle Width="30px" CssClass="mio09" />

    <HeaderStyle Font-Size="XX-Small" ForeColor="White" HorizontalAlign="Center" Width="60px" BorderStyle="Inset" />

    </asp:BoundField>

    <asp:BoundField HtmlEncode="False" DataField="yahooes" HeaderText="YH2" SortExpression="yahooes">

    <ItemStyle Width="30px" CssClass="mio09" />

    <HeaderStyle Font-Size="XX-Small" ForeColor="White" HorizontalAlign="Center" Width="60px" BorderStyle="Inset" />

    </asp:BoundField>

    </Columns>

    </asp:GridView>

     

    <asp:AccessDataSource ID="AccessDataSource1" runat="server" DataFile="C:\Inetpub\wwwroot\WebTools\Topten\WebTopTenLog.mdb"

    SelectCommand = "

    SELECT DISTINCT [url], [googlecom], [googlees], [msncom], [msnes], [yahoocom], [yahooes]

    FROM [CalculosTopTen]

    WHERE usuario='
    <%Session.SessionID%>'

    ORDER BY [googlecom] DESC, [googlees] DESC, [msncom] DESC

    ">

    </asp:AccessDataSource>

     

    'http://msdn2.microsoft.com/es-es/library/system.web.ui.webcontrols.gridview.allowsorting(VS.80).aspx

    Sub CustomersGridView_RowCreated(ByVal sender As Object, ByVal e As GridViewRowEventArgs)

    ' Use the RowType property to determine whether the

    ' row being created is the header row.

    If e.Row.RowType = DataControlRowType.Header Then

    ' Call the GetSortColumnIndex helper method to determine

    ' the index of the column being sorted.

    Dim sortColumnIndex As Integer = GetSortColumnIndex()

    'If sortColumnIndex <> -1 Then

    ' ' Call the AddSortImage helper method to add

    ' ' a sort direction image to the appropriate

    ' ' column header.

    ' AddSortImage(sortColumnIndex, e.Row)

    'End If

    End If

    End Sub

    ' This is a helper method used to add a sort direction

    ' image to the header of the column being sorted.

    Sub AddSortImage(ByVal columnIndex As Integer, ByVal row As GridViewRow)

    ' Create the sorting image based on the sort direction.

    Dim sortImage As New Image()

    If CustomersGridView.SortDirection = SortDirection.Ascending Then

    sortImage.ImageUrl = "~/Images/Ascending.jpg"

    sortImage.AlternateText = "Ascending Order"

    Else

    sortImage.ImageUrl = "~/Images/Descending.jpg"

    sortImage.AlternateText = "Descending Order"

    End If

    ' Add the image to the appropriate header cell.

    row.Cells(columnIndex).Controls.Add(sortImage)

    End Sub

    ' This is a helper method used to determine the index of the

    ' column being sorted. If no column is being sorted, -1 is returned.

    Function GetSortColumnIndex() As Integer

    ' Iterate through the Columns collection to determine the index

    ' of the column being sorted.

    Dim field As DataControlField

    For Each field In CustomersGridView.Columns

    If field.SortExpression = CustomersGridView.SortExpression Then

    Return CustomersGridView.Columns.IndexOf(field)

    End If

    Next

    Return -1

    End Function

     

     

     

    La unica diferencia que hay entre las dos soluciones es la linea: WHERE usuario='<%Session.SessionID%>' la primera lo tiene y la segunda no.

    Alguno sabe por que?

    Gracias

     

     

     

     

    • Puntos de post: 0
Página 1 de 1 (4 elementos)
© 2007 MSGuayaquil. Todos los derechos reservados.
Powered By IIS 6 Powered By ASP.NET 2.0 Ofrecido por Community Server (Commercial Edition) Powered By SQL Server 2005
Creado y Administrado por Julio Casal