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

ascendente y descendente del datagrid

Estas en el tema de ascendente y descendente del datagrid en el foro de .NET en Foros del Web. hola a todos tengo el siguiente codigo para ordenar mi datagrid pero me arroja un error alguien me podria indicar que tengo mal puesto en ...
  #1 (permalink)  
Antiguo 15/03/2005, 08:05
 
Fecha de Ingreso: marzo-2005
Mensajes: 190
Antigüedad: 19 años, 8 meses
Puntos: 0
Exclamación ascendente y descendente del datagrid

hola a todos tengo el siguiente codigo para ordenar mi datagrid pero me arroja un error alguien me podria indicar que tengo mal puesto en mi codigo

Sub suborden(ByVal source As Object, ByVal e As System.Web.UI.WebControls.DataGridSortCommandEvent Args)

Dim dv As New System.Data.DataView()

Dim strorden As String

dv.Table = MyQueryMethod(IIf((campoitem.Text = ""), "", DropDownList2.SelectedItem.Text)).Tables(0)


dim aux() as string
dim tipoSort as String =" "

aux=split(e.sortExpression, " ")

if aux(1).lengh<1 then
tipoSort="ASC"
else
if aux(1).tostring="ASC" then
tipoSort="DESC"
else
tipoSort="ASC"
end if

end if

dv.Sort = e.SortExpression+" "+tipoSort
e.SortExpression= e.sortExpression+" "+tipoSort

DataGrid1.DataSource = dv

DataGrid1.DataBind()

campoorden.Text = e.SortExpression + strorden

End Sub
  #2 (permalink)  
Antiguo 15/03/2005, 08:17
Avatar de neivan  
Fecha de Ingreso: febrero-2005
Mensajes: 539
Antigüedad: 19 años, 9 meses
Puntos: 1
hya una cosa q no comprendo
valoras la posibilidad d q e.sortexpresion traiga consigo desc o asc
si es asi lo metess en tiposort y luego le dices a dv que dv.sort=e.sortexpresion + " " + tiposort con esto no redundarias,es decir si es desc lo q te devuelve el if
al asignarle al dv.sort el e.sortexpresion ya llebaria consigo el dwesc y se lo volverias a añadir con el tiposort
No se si me entiendes
Yo creo q ese podria ser el error
  #3 (permalink)  
Antiguo 15/03/2005, 08:23
 
Fecha de Ingreso: marzo-2005
Mensajes: 190
Antigüedad: 19 años, 8 meses
Puntos: 0
no te entendi lo que me quisiste decir
  #4 (permalink)  
Antiguo 15/03/2005, 08:32
Avatar de neivan  
Fecha de Ingreso: febrero-2005
Mensajes: 539
Antigüedad: 19 años, 9 meses
Puntos: 1
aki:
if aux(1).lengh<1 then
tipoSort="ASC"
else
if aux(1).tostring="ASC" then
tipoSort="DESC"
else
'entra
tipoSort="ASC"
end if

end if

a tiposort le aswignas un valor
Vamos a suponer q se da el caso donde he puesto por comwntario entra
eso kiere decir que aux > 1 priemro y segundo que era desc y lo kieres pasar a asc
no se si me equivoco pero al asinarle la e.expresion a dv no le asinara algo asi(despues) ?????
dv.sort= colunma desc asc
teniendo encuenta q e.sortexpresion lera columna desc ????
no seria lo suyo asignarle a dv.sort=aux(0) + " " + tiposort
  #5 (permalink)  
Antiguo 15/03/2005, 08:40
Avatar de neivan  
Fecha de Ingreso: febrero-2005
Mensajes: 539
Antigüedad: 19 años, 9 meses
Puntos: 1
Que error te da???
  #6 (permalink)  
Antiguo 15/03/2005, 08:48
 
Fecha de Ingreso: marzo-2005
Mensajes: 190
Antigüedad: 19 años, 8 meses
Puntos: 0
de partida que la propiedad sortexpression es readonly eso me pasa en la siguiente linea

e.SortExpression = e.SortExpression + " " + tipoSort
cuando pongo eso como comentario me arroja el siguiente error
al momento de ejecutarlo para que me lo ordene
Índice fuera de los límites de la matriz
en la siguiente linea

If aux(1).ToString < 1 Then
  #7 (permalink)  
Antiguo 15/03/2005, 08:55
Avatar de neivan  
Fecha de Ingreso: febrero-2005
Mensajes: 539
Antigüedad: 19 años, 9 meses
Puntos: 1
si lo que kieres es ver si e.sortexpresion primero lleba algo mas q la columna y por lo tanto aux lleba ams de un valor dentro hazlo de esta amnera:
if aux.length <= 1 then
entra si tiene un valro o ninguno
else
entra si tiene mas d eun valor es decir en tiu caso 2
end if
  #8 (permalink)  
Antiguo 15/03/2005, 09:05
 
Fecha de Ingreso: marzo-2005
Mensajes: 190
Antigüedad: 19 años, 8 meses
Puntos: 0
ok pero me sigue arrojando el error en el sortexpression
  #9 (permalink)  
Antiguo 15/03/2005, 09:08
Avatar de neivan  
Fecha de Ingreso: febrero-2005
Mensajes: 539
Antigüedad: 19 años, 9 meses
Puntos: 1
Desacuerdo

para q kieres asignare un valor a un parametro q no te va a servir para nada,ese parametro ademas te dice en erro q es de solo lectura...
¿¿¿¿ ????
  #10 (permalink)  
Antiguo 15/03/2005, 09:10
 
Fecha de Ingreso: marzo-2005
Mensajes: 190
Antigüedad: 19 años, 8 meses
Puntos: 0
con la solucion que me diste ya no me arroja el error de Índice fuera de los límites de la matriz
pero me los ordena solo de A a Z y no viceversa
  #11 (permalink)  
Antiguo 15/03/2005, 09:16
Avatar de neivan  
Fecha de Ingreso: febrero-2005
Mensajes: 539
Antigüedad: 19 años, 9 meses
Puntos: 1
que te devulve esto:
campoorden.Text = e.SortExpression
?
asi sabras lo q te devuelve la e.sortexpresion cdo pinchas en una columna y si puedes o no hacer lo q estas intentando
  #12 (permalink)  
Antiguo 15/03/2005, 09:32
 
Fecha de Ingreso: marzo-2005
Mensajes: 190
Antigüedad: 19 años, 8 meses
Puntos: 0
me pone el titulo de la columna

lo cambie de la siguiente forma donde decia
e.SortExpression = e.SortExpression + " " + tipoSort
lo cambie por lo siguiente

campoorden.Text = e.SortExpression + " " + tipoSort
y lo que hace ahora es colocarme el nombre de la columna mas asc ejemplo
item asc
  #13 (permalink)  
Antiguo 15/03/2005, 09:41
Avatar de neivan  
Fecha de Ingreso: febrero-2005
Mensajes: 539
Antigüedad: 19 años, 9 meses
Puntos: 1
yo creo q tu lo que kieres hacer es q si una vez te pincha en una columna te lo ordene ascendentemente y si vuelve a darle otra vez te lo ordene descendentemente

yo lo haria asi
utilizario 2 variales una para controlar q columan he ordenado anteriormente y otra para si era asc o desc
esas do2 variables serain 2 viewstate

mira este codigo haber que te parece:

if viewstate("columna")=e.sortexpression then
'es la misma columna de la anterior ordenacion
if viewstate("orden")="ASC" then
dv.sort=e.sortexpression & " " & "DESC"
viewstate("orden")="DESC"
ELSE
dv.sort=e.sortexpression & " " & "ASC"
viewstate("orden")="ASC"
END IF
ELSE
viewstate("columna")=e.sortexpression
'ahora por ejemplo q la primera vez sea ascendente
dv.sort=e.sortexpression & " " & "asc"
viewstate("orden")="DESC"
end if
  #14 (permalink)  
Antiguo 15/03/2005, 09:45
 
Fecha de Ingreso: marzo-2005
Mensajes: 190
Antigüedad: 19 años, 8 meses
Puntos: 0
eso es precisamente lo que quiero hacer
pero no quiero cambiar todo el codigo me podrias indicar que debo agregar al codigo que ya tengo
  #15 (permalink)  
Antiguo 15/03/2005, 09:52
Avatar de neivan  
Fecha de Ingreso: febrero-2005
Mensajes: 539
Antigüedad: 19 años, 9 meses
Puntos: 1
creo q tu codigo falla en un par d ecosas q tienes q entender,

primera q si pinchas enciima de una columna para ordenarla,e.sortexpresion siempre lo unico q t edevolvera sera el nombre d ela columna por lotanto no sabras ni que ordenacion habia antes ni por q columna estaba ordenada.
Tampoco le puedes asignar valor a e.sortexpresion por q es d esolo lectura y ademas por q no tendria sentido,cada vez q pinchas en una columna este parametro te devolvera el nombre de esta nada ams.
Por eso t ehe puesto q controles de alguna 2 cosas la columna y si era ascendente o descendente antes

cipia y pega mi codigo,no tendras q modificar mas cosas solo sustituir lo q tienes a partir de dv.table hasta datagrid.datasource=dv
y pruebalo,como mucho tendrias q inicializar esas varables antes,en el if not ispostback pero creo q no es necesario
  #16 (permalink)  
Antiguo 15/03/2005, 10:01
 
Fecha de Ingreso: marzo-2005
Mensajes: 190
Antigüedad: 19 años, 8 meses
Puntos: 0
gracias por tu ayuda neivan me solucionaste el problema ojala en algun momento yo te pueda ayudar a ti
  #17 (permalink)  
Antiguo 15/03/2005, 10:07
 
Fecha de Ingreso: marzo-2005
Mensajes: 190
Antigüedad: 19 años, 8 meses
Puntos: 0
Claro Que Me Asalta Una Pequeña Duda Solo Se Me Ordena Descendentemente Cuando Presiono 2 Veces La Columna A Que Se Debe Eso
  #18 (permalink)  
Antiguo 15/03/2005, 10:13
Avatar de neivan  
Fecha de Ingreso: febrero-2005
Mensajes: 539
Antigüedad: 19 años, 9 meses
Puntos: 1
si miras el codigo q te pase,esta pensado para q la priemra vez q se pincha a una columna te la ordene ascendentemente y la segunda descendente,si cambias de columan la primera ascendente y la seunda descentende... cambialo como kieras q te salga,

haz una cosa

inicializa viewstate("columna") a el nombre de la columna por la cual venga ordenado la primera vez y viewstate("orden")="ASC"
esto en el if not ispostback de page_load
si solo tienes una columan pues el nombre de esa columna
viewstate("columna")="Nombre"
  #19 (permalink)  
Antiguo 15/03/2005, 10:20
 
Fecha de Ingreso: marzo-2005
Mensajes: 190
Antigüedad: 19 años, 8 meses
Puntos: 0
OSEA ALGO ASI

If Not Page.IsPostBack Then
DIM viewstate("COLUMNA") = "LUGAR"
End If
  #20 (permalink)  
Antiguo 15/03/2005, 10:23
Avatar de neivan  
Fecha de Ingreso: febrero-2005
Mensajes: 539
Antigüedad: 19 años, 9 meses
Puntos: 1
sub page_load(...)...
If Not Page.IsPostBack Then
....
viewstate("COLUMNA") = "LUGAR"
viewstate("orden")="ASC"
....
End If
end sub

el dim no hay que ponerlo para definir una variavle viewstate
pon esto y pruebalo
  #21 (permalink)  
Antiguo 15/03/2005, 10:57
 
Fecha de Ingreso: marzo-2005
Mensajes: 190
Antigüedad: 19 años, 8 meses
Puntos: 0
ok me funciona pero al momento de cambiar de pagina se me cae a que me refiero si paso a la pagina 2 se me vuelve a como estaba originalmente
  #22 (permalink)  
Antiguo 15/03/2005, 11:11
Avatar de neivan  
Fecha de Ingreso: febrero-2005
Mensajes: 539
Antigüedad: 19 años, 9 meses
Puntos: 1
eso pasa simepre
grava en session el dv despues de asignarle la espresion de ordenamiento
y en el metodo donde se gestiona la paginacion asignale al datagrid el dv q esta en sesion

en el metodo de paginacion pon:
datagrid1.datasourc=session("dv")
datagrid1.currentpageindex=e.newpageindex
datagird1.databind

en el metodo de la ordenacion al final pones
session("dv")=dv

y la priemra vez q cargas el datagrid1 tb despues de cargarlo pon session("dv")=dv
supongo q esto lo haras en el if not ispost back para q seguna cargas la pagina tengas el datagrid cargao ya
con esto ya lo tendrias

esto es porq cdo pasa de pagina le vuelves a asignar dv y este dv no tiene la ordenacion q le habias asignado antes,por eso te digo q guardes en session el dv para la paginacion
  #23 (permalink)  
Antiguo 15/03/2005, 11:54
 
Fecha de Ingreso: marzo-2005
Mensajes: 190
Antigüedad: 19 años, 8 meses
Puntos: 0
te envio el codigo donde tengo la paginacion ya que hice lo que me dices pero no me resulta lo que esta en negrita es lo que puse segun lo que entendi de tu ejemplo y lo que tengo en mi codigo


Sub mi_cambio(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DataGridPageChangedEvent Args)
DataGrid1.CurrentPageIndex = e.NewPageIndex
'datagrid1.datasource=myquerymethod(cstr(textbox1. text))
If campoorden.Text = "" Then
DataGrid1.DataSource = MyQueryMethod(DropDownList1.SelectedItem.Text(), IIf((campoitem.Text = ""), "", DropDownList3.SelectedItem.Text), IIf((campoequipo.Text = ""), "", DropDownList4.SelectedItem.Text), IIf((campolugar.Text = ""), "", DropDownList5.SelectedItem.Text))
Else
Dim dv As New System.Data.DataView()
dv.Table = MyQueryMethod(DropDownList1.Items(DropDownList1.Se lectedIndex).Text, IIf((campoitem.Text = ""), "", DropDownList3.SelectedItem.Text), IIf((campoequipo.Text = ""), "", DropDownList4.SelectedItem.Text), IIf((campolugar.Text = ""), "", DropDownList5.SelectedItem.Text)).Tables(0)
dv.Sort = campoorden.Text
DataGrid1.DataSource = dv
dv = dv
End If


DataGrid1.DataBind()
End Sub
  #24 (permalink)  
Antiguo 15/03/2005, 16:35
Avatar de neivan  
Fecha de Ingreso: febrero-2005
Mensajes: 539
Antigüedad: 19 años, 9 meses
Puntos: 1
me referia q alamcenar en session el dv para recogerlo despues cdo kisieras manteniendo la ordenacion =>
.....
session("dv")=dv
.....
datasource=session("dv")

Pero veo para solucionar esto utilizas campoorden.Text por lo tanto olvidate de mi ultmio mensaje y en e lmetodo de ordenacion mete

if viewstate("columna")=e.sortexpression then
'es la misma columna de la anterior ordenacion
if viewstate("orden")="ASC" then
dv.sort=e.sortexpression & " " & "DESC"
CAMPOORDEN.TEXT=e.sortexpression & " " & "DESC"
viewstate("orden")="DESC"
ELSE
dv.sort=e.sortexpression & " " & "ASC"
CAMPOORDEN.TEXT=e.sortexpression & " " & "ASC"
viewstate("orden")="ASC"
END IF
ELSE
viewstate("columna")=e.sortexpression
'ahora por ejemplo q la primera vez sea ascendente
dv.sort=e.sortexpression & " " & "asc"
CAMPOORDEN.TEXT=e.sortexpression & " " & "ASC"
viewstate("orden")="DESC"
end if

Añade las tres lineas de CAMPOORDEN.TEXT como aparecen ahi haber si te funciona asi
  #25 (permalink)  
Antiguo 16/03/2005, 07:25
 
Fecha de Ingreso: marzo-2005
Mensajes: 190
Antigüedad: 19 años, 8 meses
Puntos: 0
hice los cambios que me indicaste pero al hacer cambio de pagina me arroja el siguiente error
No se puede encontrar la columna LugarDESC. lugar es el nombre de la columna

aqui te envio el codigo para que lo veas el error se me produce en las lines que estan marcadas con negrita

Sub pagerbuttonclick(ByVal sender As Object, ByVal e As EventArgs)
Dim arg As String = sender.commandargument
Select Case arg
Case "siguiente"
If (DataGrid1.CurrentPageIndex < (DataGrid1.PageCount - 1)) Then
DataGrid1.CurrentPageIndex += 1
End If
Case "anterior"
If (DataGrid1.CurrentPageIndex > 0) Then
DataGrid1.CurrentPageIndex -= 1
End If
Case "ultima"
DataGrid1.CurrentPageIndex = (DataGrid1.PageCount - 1)
Case "primera"
DataGrid1.CurrentPageIndex = 0
End Select
'DataGrid1.DataSource = MyQueryMethod(CStr(textbox1.text))
If campoorden.Text = "" Then
DataGrid1.DataSource = MyQueryMethod(DropDownList1.SelectedItem.Text(), IIf((campoitem.Text = ""), "", DropDownList3.SelectedItem.Text), IIf((campoequipo.Text = ""), "", DropDownList4.SelectedItem.Text), IIf((campolugar.Text = ""), "", DropDownList5.SelectedItem.Text))

Else
Dim dv As New System.Data.DataView()
dv.Table = MyQueryMethod(DropDownList1.SelectedItem.Text, IIf((campoitem.Text = ""), "", DropDownList3.SelectedItem.Text), IIf((campoequipo.Text = ""), "", DropDownList4.SelectedItem.Text), IIf((campolugar.Text = ""), "", DropDownList5.SelectedItem.Text)).Tables(0)
dv.Sort = campoorden.Text
DataGrid1.DataSource = dv


End If

DataGrid1.DataBind()


End Sub
Sub mi_cambio(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DataGridPageChangedEvent Args)
DataGrid1.CurrentPageIndex = e.NewPageIndex
'datagrid1.datasource=myquerymethod(cstr(textbox1. text))
If campoorden.Text = "" Then
DataGrid1.DataSource = MyQueryMethod(DropDownList1.SelectedItem.Text(), IIf((campoitem.Text = ""), "", DropDownList3.SelectedItem.Text), IIf((campoequipo.Text = ""), "", DropDownList4.SelectedItem.Text), IIf((campolugar.Text = ""), "", DropDownList5.SelectedItem.Text))
Else
Dim dv As New System.Data.DataView()
dv.Table = MyQueryMethod(DropDownList1.Items(DropDownList1.Se lectedIndex).Text, IIf((campoitem.Text = ""), "", DropDownList3.SelectedItem.Text), IIf((campoequipo.Text = ""), "", DropDownList4.SelectedItem.Text), IIf((campolugar.Text = ""), "", DropDownList5.SelectedItem.Text)).Tables(0)
dv.Sort = campoorden.Text
DataGrid1.DataSource = dv

End If
DataGrid1.DataBind()
End Sub


Sub orden(ByVal source As Object, ByVal e As System.Web.UI.WebControls.DataGridSortCommandEvent Args)

Dim dv As New System.Data.DataView()

Dim strorden As String
dv.Table = MyQueryMethod(DropDownList1.Items(DropDownList1.Se lectedIndex).Text, IIf((campoitem.Text = ""), "", DropDownList3.SelectedItem.Text), IIf((campoequipo.Text = ""), "", DropDownList4.SelectedItem.Text), IIf((campolugar.Text = ""), "", DropDownList5.SelectedItem.Text)).Tables(0)
If viewstate("vcolumna") = e.SortExpression Then

If viewstate("vorden") = "ASC" Then
dv.Sort = e.SortExpression & " " & "DESC"
campoorden.Text = e.SortExpression & " " & "DESC"
viewstate("vorden") = "DESC"

Else
dv.Sort = e.SortExpression & " " & "ASC"
campoorden.Text = e.SortExpression & " " & "ASC"
viewstate("vorden") = "ASC"
End If
Else
viewstate("vcolumna") = e.SortExpression
dv.Sort = e.SortExpression & " " & "ASC"
campoorden.Text = e.SortExpression & " " & "ASC"
viewstate("vorden") = "ASC"
End If


DataGrid1.DataSource = dv

DataGrid1.DataBind()

campoorden.Text = e.SortExpression + "" + viewstate("vorden")

End Sub
  #26 (permalink)  
Antiguo 16/03/2005, 08:02
Avatar de neivan  
Fecha de Ingreso: febrero-2005
Mensajes: 539
Antigüedad: 19 años, 9 meses
Puntos: 1
si te fijas en esta linea que tienes:
campoorden.Text = e.SortExpression + "" + viewstate("vorden")
estas concatenando sin dejar espacio entre medio
aparte de q no necestias poner esa linea por q ya as asignado a campoorden.Text el valor antes asi q kitala
es la ultima del metodo orden
  #27 (permalink)  
Antiguo 16/03/2005, 08:12
 
Fecha de Ingreso: marzo-2005
Mensajes: 190
Antigüedad: 19 años, 8 meses
Puntos: 0
mira la linea que me digiste que la borrara la cambie de la siguiente forma es como estaba originalmente y me conserva el cambio de pagina solo ascendente y cuando lo cambio a descendente y realizo el cambio de pagino vuelve a la forma original

campoorden.Text = e.SortExpression + strorden
  #28 (permalink)  
Antiguo 16/03/2005, 08:13
 
Fecha de Ingreso: marzo-2005
Mensajes: 190
Antigüedad: 19 años, 8 meses
Puntos: 0
y si la quito cuando hago cambio de pagina me lo deja como estaba al principio
  #29 (permalink)  
Antiguo 16/03/2005, 08:52
Avatar de neivan  
Fecha de Ingreso: febrero-2005
Mensajes: 539
Antigüedad: 19 años, 9 meses
Puntos: 1
ponla de esta manera:
campoorden.Text = e.SortExpression + " " + viewstate("vorden")
cambia en q entre las comilals hay un espacio y no te dara ese error
  #30 (permalink)  
Antiguo 16/03/2005, 09:37
 
Fecha de Ingreso: marzo-2005
Mensajes: 190
Antigüedad: 19 años, 8 meses
Puntos: 0
muchas gracias neivan el error fue solucionado
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 13:42.