Foros del Web » Programando para Internet » ASPX (.net) »

Paginar y ordenar un gridview

Estas en el tema de Paginar y ordenar un gridview en el foro de ASPX (.net) en Foros del Web. Hola a todos. Tengo un problemilla a la hora de paginar y ordenar un gridview. El tema es que cuando quiero mostrar el gridview ordenado ...
  #1 (permalink)  
Antiguo 16/02/2010, 03:58
 
Fecha de Ingreso: diciembre-2009
Mensajes: 6
Antigüedad: 14 años, 4 meses
Puntos: 0
Paginar y ordenar un gridview

Hola a todos.

Tengo un problemilla a la hora de paginar y ordenar un gridview.
El tema es que cuando quiero mostrar el gridview ordenado de forma descendente, y quiero ir a otra página, pierde el orden. Es decir, me va a la página que le he pedido pero me vuelve a la ordenación incial que era ascendente.

Seguro que la solución es muy fácil, pero no la encuentro.

Gracias de antemano.

El código que utilizo es el siguiente:


Protected Sub ListadoClientes_PageIndexChanging(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewPageEventArgs) Handles ListadoClientes.PageIndexChanging

Me.ListadoClientes.PageIndex = e.NewPageIndex
Me.ListadoClientes.DataBind()

End Sub

Protected Sub ListadoClientes_Sorting(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewSortEventArgs) Handles ListadoClientes.Sorting
Dim sortExpression As String = e.SortExpression

If GridViewSortDirection = SortDirection.Ascending Then

GridViewSortDirection = SortDirection.Descending

SortGridView(sortExpression, "DESC")

Else

GridViewSortDirection = SortDirection.Ascending

SortGridView(sortExpression, "ASC")

End If

direccion = Me.ListadoClientes.SortDirection

End Sub


Private Sub SortGridView(ByVal sortExpression As String, ByVal direction As String)

Dim dv As New Data.DataView(dt)

dv.Sort = sortExpression + " " + direction

ListadoClientes.DataSource = dv

ListadoClientes.DataBind()

End Sub


Public Property GridViewSortDirection() As SortDirection

Get

If ViewState("sortDirection") Is Nothing Then

ViewState("sortDirection") = SortDirection.Ascending

End If

Return DirectCast(ViewState("sortDirection"), SortDirection)

End Get

Set(ByVal value As SortDirection)

ViewState("sortDirection") = value

End Set

End Property
  #2 (permalink)  
Antiguo 16/02/2010, 21:20
 
Fecha de Ingreso: febrero-2010
Mensajes: 5
Antigüedad: 14 años, 2 meses
Puntos: 0
Respuesta: Paginar y ordenar un gridview

Protected Sub ListadoClientes_PageIndexChanging(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewPageEventArgs) Handles ListadoClientes.PageIndexChanging



Me.ListadoClientes.PageIndex = e.NewPageIndex

'no te compliques aqui pon el query con el que mandas a llenar el dataset solo que e elquery lo ordenas de una vez ascendente o descendente y listo asi cada vez que cambie la pagina del grid sigue manteniendo el orden que trae por que ya lo trae el query

Me.ListadoClientes.DataBind()

End Sub
  #3 (permalink)  
Antiguo 17/02/2010, 04:06
 
Fecha de Ingreso: diciembre-2009
Mensajes: 6
Antigüedad: 14 años, 4 meses
Puntos: 0
Respuesta: Paginar y ordenar un gridview

Hola, gracias por responder.

Exactamente no me sirve esta solución porque tengo varios campos por los que ordenar y el código se complica un poco si tengo que recuperar primero el campo por el que está siendo ordenado, para luego paginar y ordenar por ese campo.

¿No existe alguna otra solución ?

Gracias.
  #4 (permalink)  
Antiguo 22/02/2010, 09:12
 
Fecha de Ingreso: enero-2008
Ubicación: Santiago
Mensajes: 49
Antigüedad: 16 años, 2 meses
Puntos: 4
Respuesta: Paginar y ordenar un gridview

Hola, ocupé tu código, le hice unos cambios y me funcionó, aqui te lo mando todo de nuevo, por si aún lo necesitas.

Private Sub SortGridView(ByVal sortExpression As String, ByVal direction As String, ByVal dt As DataTable)

Dim dv As New Data.DataView(dt)

dv.Sort = sortExpression + " " + direction

Me.gvNub.DataSource = dv

Me.gvNub.DataBind()

End Sub


Public Property GridViewSortDirection() As SortDirection

Get

If ViewState("sortDirection") Is Nothing Then

ViewState("sortDirection") = SortDirection.Ascending

End If

Return DirectCast(ViewState("sortDirection"), SortDirection)

End Get

Set(ByVal value As SortDirection)

ViewState("sortDirection") = value

End Set

End Property

Protected Sub gvNub_PageIndexChanging(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewPageEventArgs)
Me.gvNub.PageIndex = e.NewPageIndex
Dim expresion As String = Session("sortexpresion").ToString()
Dim direccion As String = Session("sortdireccion").ToString()
If expresion = "" Or direccion = "" Then
Me.gvNub.DataSource = TraerDT()
Me.gvNub.DataBind()
Else
If direccion = "Ascending" Then
SortGridView(expresion, "ASC", odatos.load_nuv(2, 4, Contabilidad.Datos.Persistencia.ESPMostrarLoad.Por ID))
ElseIf direccion = "Descending" Then
SortGridView(expresion, "DESC", TraerDT())
End If

End If
End Sub

Protected Sub gvNub_Sorting(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewSortEventArgs)
Dim sortExpression As String = e.SortExpression

If GridViewSortDirection = SortDirection.Ascending Then

GridViewSortDirection = SortDirection.Descending

SortGridView(sortExpression, "DESC", odatos.load_nuv(2, 4, Contabilidad.Datos.Persistencia.ESPMostrarLoad.Por ID))

Else

GridViewSortDirection = SortDirection.Ascending

SortGridView(sortExpression, "ASC", odatos.load_nuv(2, 4, Contabilidad.Datos.Persistencia.ESPMostrarLoad.Por ID))

End If
Session("sortdireccion") = GridViewSortDirection
Session("sortexpresion") = e.SortExpression

End Sub


Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

If Not IsPostBack Then
Session.Add("sortdireccion", "")
Session.Add("sortexpresion", "")
End If
CargarGrilla()
End Sub

Private Sub CargarGrilla()
Dim dt As New DataTable
Try
dt = TraerDT()
gvNub.DataSource = dt
gvNub.DataBind()

Catch ex As Exception

End Try
End Sub


Espero te sirva de algo, porque a mi me sirvió xD
saludos

Etiquetas: gridview, paginar, aspx
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 12:01.