Ordenar un listview

17/10/2006 - 10:14 por Vmrincon | Informe spam
Hola amigos:

Estoy trabajando con un listview en el cual tengo una serie de filas
las cuales tienen un checkbox que puede estar a TRUE o FALSE, me
gustaria hacer dos cosas; la primera que los campos estuvieran
ordenados por checkeados y no checkeados y a continuación se
subordenaran por orden alfabético. ¿A alguien se le ocurre cómo lo
podría hacer?


Muchas gracias

Preguntas similare

Leer las respuestas

#6 Eduardo Alvarado Meza
18/10/2006 - 21:28 | Informe spam
Ya el codigo esta en el link que te di:
http://msdn2.microsoft.com/en-us/li...orter.aspx

Solo tienes que crear la siguiente clase:

Class ListViewItemComparer
Implements IComparer

Private col As Integer

Public Sub New()
col = 0
End Sub

Public Sub New(ByVal column As Integer)
col = column
End Sub

Public Function Compare(ByVal x As Object, ByVal y As Object) As Integer
_
Implements IComparer.Compare
Return [String].Compare(CType(x, ListViewItem).SubItems(col).Text,
CType(y, ListViewItem).SubItems(col).Text)
End Function
End Class


Luego, en el evento que quieras poner lo siguiente:

Me.ListView1.ListViewItemSorter = New ListViewItemComparer(1)

Donde el #1 es el primer subitems. En tu caso seria primero ordenar por
orden alfabetico y luego ordenar la columa booleana para que se terminen
agrupando por este ultimo.



"Vmrincon" wrote in message
news:
Hola de Nuevo:

En estado investigando un poco más sobre el tema, y la cuestión es
que no hay problema en ordenar en función del campo Item.Text, el
problema viene si quieres ordenar según el Item.Subitem.Text ¿Alguien
sabe cómo se puede hacer? Es un poco más complicado... Pero querría
ordenar primero aquellos campos que tienen el checkbox a TRUE y dentro
de estos, por orden alfabético...

Un saludo y mil gracias


Eduardo Alvarado Meza (EliminarEsto) wrote:
lol, bueno en parte es cierto... tienes razon, el metodo Sort del listview
solo ordena segun el orden preestablecido el texto del item pero no los
subitems. La solución rapida fue la que le di, pero existe otra y para
nada
desconocida que es mencionada en el siguiente enlace:

http://msdn2.microsoft.com/en-us/li....sort.aspx

Y es trabajando con el ListViewItemSorter, el siguiente link demuestra su
uso:
http://msdn2.microsoft.com/en-us/li...orter.aspx

De esa manera se pueden ordenar los subitems; ordenar una columna primero
y
la otra despues daria el efecto deseado por el compañero, sin embargo, el
ejemplo no contempla el orden descendente, para ello hay intercambiar las
variables en la funcion Compare de la clase hecha ListViewItemComparer,
modificando la siguiente linea asi:

Return [String].Compare(CType(y, ListViewItem).SubItems(col).Text,
CType(x,
ListViewItem).SubItems(col).Text)

Espero se aclaren un poco mas las cosas y que este sea el otro metodo a
que
te refieres la verdad el aporte fue excelente.



"Carlos Gómez" wrote in message
news:

Eduardo Alvarado Meza (EliminarEsto) ha escrito:

> Creo que con el listview no se puede,

FALSO,

un listview puede ser perfectamente ordenado por las distintas columnas
que lo componen.

Si quieres, me lo dices y mañana mando un ejemplo (no tengo a mano el
código, y me puedo equivocar facilmente si lo pongo de memoria)
Respuesta Responder a este mensaje
#7 Vmrincon
19/10/2006 - 08:23 | Informe spam
Estupendo Eduardo, me ha sido de gran ayuda :)

Muchas gracias

Eduardo Alvarado Meza (EliminarEsto) ha escrito:

Ya el codigo esta en el link que te di:
http://msdn2.microsoft.com/en-us/li...orter.aspx

Solo tienes que crear la siguiente clase:

Class ListViewItemComparer
Implements IComparer

Private col As Integer

Public Sub New()
col = 0
End Sub

Public Sub New(ByVal column As Integer)
col = column
End Sub

Public Function Compare(ByVal x As Object, ByVal y As Object) As Integer
_
Implements IComparer.Compare
Return [String].Compare(CType(x, ListViewItem).SubItems(col).Text,
CType(y, ListViewItem).SubItems(col).Text)
End Function
End Class


Luego, en el evento que quieras poner lo siguiente:

Me.ListView1.ListViewItemSorter = New ListViewItemComparer(1)

Donde el #1 es el primer subitems. En tu caso seria primero ordenar por
orden alfabetico y luego ordenar la columa booleana para que se terminen
agrupando por este ultimo.



"Vmrincon" wrote in message
news:
Hola de Nuevo:

En estado investigando un poco más sobre el tema, y la cuestión es
que no hay problema en ordenar en función del campo Item.Text, el
problema viene si quieres ordenar según el Item.Subitem.Text ¿Alguien
sabe cómo se puede hacer? Es un poco más complicado... Pero querría
ordenar primero aquellos campos que tienen el checkbox a TRUE y dentro
de estos, por orden alfabético...

Un saludo y mil gracias


Eduardo Alvarado Meza (EliminarEsto) wrote:
> lol, bueno en parte es cierto... tienes razon, el metodo Sort del listview
> solo ordena segun el orden preestablecido el texto del item pero no los
> subitems. La solución rapida fue la que le di, pero existe otra y para
> nada
> desconocida que es mencionada en el siguiente enlace:
>
> http://msdn2.microsoft.com/en-us/li....sort.aspx
>
> Y es trabajando con el ListViewItemSorter, el siguiente link demuestra su
> uso:
> http://msdn2.microsoft.com/en-us/li...orter.aspx
>
> De esa manera se pueden ordenar los subitems; ordenar una columna primero
> y
> la otra despues daria el efecto deseado por el compañero, sin embargo, el
> ejemplo no contempla el orden descendente, para ello hay intercambiar las
> variables en la funcion Compare de la clase hecha ListViewItemComparer,
> modificando la siguiente linea asi:
>
> Return [String].Compare(CType(y, ListViewItem).SubItems(col).Text,
> CType(x,
> ListViewItem).SubItems(col).Text)
>
> Espero se aclaren un poco mas las cosas y que este sea el otro metodo a
> que
> te refieres la verdad el aporte fue excelente.
>
>
>
> "Carlos Gómez" wrote in message
> news:
>
> Eduardo Alvarado Meza (EliminarEsto) ha escrito:
>
> > Creo que con el listview no se puede,
>
> FALSO,
>
> un listview puede ser perfectamente ordenado por las distintas columnas
> que lo componen.
>
> Si quieres, me lo dices y mañana mando un ejemplo (no tengo a mano el
> código, y me puedo equivocar facilmente si lo pongo de memoria)
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida