Ordenar Datos a Partir de un ListView

28/06/2006 - 17:46 por alfonso_C# | Informe spam
Hola como andan ? . Queria confirmar si la logica que estoy aplicando
es la correcta o hay otra forma de hacer lo que les voy a comentar:

Tengo un ListView con Datos que han sido ingresados aleatoriamente a
gusto del Usuario. Bien, este ListView tiene varias Columnas o SubItems
y estos datos debo ordenarlos por 2 de esas columnas. Hasta donde tengo
entendido solo se puede ordenar 1 sola columna del ListView por ese
motivo he decidido usar una DataTable para llenarla con la misma data
del ListView y ordenar este por medio de un DataView y procesar los
datos a partir de alli. ¿Esto esta bien? ¿El camino que escogí es el
mas largo? ¿Existe una manera mas sencilla de hacer eso ?. P.D.: Solo
estoy trabajando con datos en memoria no directamente con Base de
Datos, o sea nada de DataBinding ni nada de esas cosas. Agradecido por
sus comentarios. :)

Preguntas similare

Leer las respuestas

#1 Vyacheslav Popov
28/06/2006 - 18:12 | Informe spam
Hola Alonso,

Me ocurre lo siguiente: si tienes que ordenar por dos campos A y B ordena
primero por el campo B y luego por el campo A

-desordenado
A B
2 b
1 a
2 a
1 b

-1ª ordenacion
A B
1 a
2 a
1 b
2 b

-2ª ordenacion
A B
1 a
1 b
2 a
2 b

Saludos.



"alfonso_C#" escribió en el mensaje
news:
Hola como andan ? . Queria confirmar si la logica que estoy aplicando
es la correcta o hay otra forma de hacer lo que les voy a comentar:

Tengo un ListView con Datos que han sido ingresados aleatoriamente a
gusto del Usuario. Bien, este ListView tiene varias Columnas o SubItems
y estos datos debo ordenarlos por 2 de esas columnas. Hasta donde tengo
entendido solo se puede ordenar 1 sola columna del ListView por ese
motivo he decidido usar una DataTable para llenarla con la misma data
del ListView y ordenar este por medio de un DataView y procesar los
datos a partir de alli. ¿Esto esta bien? ¿El camino que escogí es el
mas largo? ¿Existe una manera mas sencilla de hacer eso ?. P.D.: Solo
estoy trabajando con datos en memoria no directamente con Base de
Datos, o sea nada de DataBinding ni nada de esas cosas. Agradecido por
sus comentarios. :)
Respuesta Responder a este mensaje
#2 alfonso_C#
28/06/2006 - 21:27 | Informe spam
Gracias Vyacheslav, te refieres a ordenar con algun metodo del ListView
una columna y luego la otra ?


Vyacheslav Popov ha escrito:

Hola Alonso,

Me ocurre lo siguiente: si tienes que ordenar por dos campos A y B ordena
primero por el campo B y luego por el campo A

-desordenado
A B
2 b
1 a
2 a
1 b

-1ª ordenacion
A B
1 a
2 a
1 b
2 b

-2ª ordenacion
A B
1 a
1 b
2 a
2 b

Saludos.



"alfonso_C#" escribió en el mensaje
news:
Hola como andan ? . Queria confirmar si la logica que estoy aplicando
es la correcta o hay otra forma de hacer lo que les voy a comentar:

Tengo un ListView con Datos que han sido ingresados aleatoriamente a
gusto del Usuario. Bien, este ListView tiene varias Columnas o SubItems
y estos datos debo ordenarlos por 2 de esas columnas. Hasta donde tengo
entendido solo se puede ordenar 1 sola columna del ListView por ese
motivo he decidido usar una DataTable para llenarla con la misma data
del ListView y ordenar este por medio de un DataView y procesar los
datos a partir de alli. ¿Esto esta bien? ¿El camino que escogí es el
mas largo? ¿Existe una manera mas sencilla de hacer eso ?. P.D.: Solo
estoy trabajando con datos en memoria no directamente con Base de
Datos, o sea nada de DataBinding ni nada de esas cosas. Agradecido por
sus comentarios. :)
Respuesta Responder a este mensaje
#3 Vyacheslav Popov
29/06/2006 - 18:36 | Informe spam
Bueno me referia al efecto de ordenación que tienes en la vista de detalle
del explorador de archivos.

Chapuzzeando

listView1.ListViewItemSorter = new ListViewItemComparer(B);
listView1.Sort();
listView1.ListViewItemSorter = new ListViewItemComparer(A);
listView1.Sort();

class ListViewItemComparer : IComparer
{
private int col;
public ListViewItemComparer()
{
col = 0;
}
public ListViewItemComparer(int column)
{
col = column;
}
public int Compare(object x, object y)
{
return String.Compare(((ListViewItem)x).SubItems[col].Text,
((ListViewItem)y).SubItems[col].Text);
}
}

Otra solucion
public int Compare(object x, object y)
{
int result =
String.Compare(((ListViewItem)x).SubItems[colA].Text,
((ListViewItem)y).SubItems[colA].Text);
if (result == 0)
result =
String.Compare(((ListViewItem)x).SubItems[colB].Text,
((ListViewItem)y).SubItems[colB].Text));

return result;
}


La clase ListViewItemComparer la enlazas con listView:

lvwColumnSorter = new ListViewColumnSorter();
listView1.ListViewItemSorter = lvwColumnSorter;

Saludos.

"alfonso_C#" escribió en el mensaje
news:
Gracias Vyacheslav, te refieres a ordenar con algun metodo del ListView
una columna y luego la otra ?


Vyacheslav Popov ha escrito:

Hola Alonso,

Me ocurre lo siguiente: si tienes que ordenar por dos campos A y B ordena
primero por el campo B y luego por el campo A

-desordenado
A B
2 b
1 a
2 a
1 b

-1ª ordenacion
A B
1 a
2 a
1 b
2 b

-2ª ordenacion
A B
1 a
1 b
2 a
2 b

Saludos.



"alfonso_C#" escribió en el mensaje
news:
Hola como andan ? . Queria confirmar si la logica que estoy aplicando
es la correcta o hay otra forma de hacer lo que les voy a comentar:

Tengo un ListView con Datos que han sido ingresados aleatoriamente a
gusto del Usuario. Bien, este ListView tiene varias Columnas o SubItems
y estos datos debo ordenarlos por 2 de esas columnas. Hasta donde tengo
entendido solo se puede ordenar 1 sola columna del ListView por ese
motivo he decidido usar una DataTable para llenarla con la misma data
del ListView y ordenar este por medio de un DataView y procesar los
datos a partir de alli. ¿Esto esta bien? ¿El camino que escogí es el
mas largo? ¿Existe una manera mas sencilla de hacer eso ?. P.D.: Solo
estoy trabajando con datos en memoria no directamente con Base de
Datos, o sea nada de DataBinding ni nada de esas cosas. Agradecido por
sus comentarios. :)
Respuesta Responder a este mensaje
#4 alfonso_C#
29/06/2006 - 20:40 | Informe spam
Gracias (^_^)


Vyacheslav Popov ha escrito:

Bueno me referia al efecto de ordenación que tienes en la vista de detalle
del explorador de archivos.

Chapuzzeando

listView1.ListViewItemSorter = new ListViewItemComparer(B);
listView1.Sort();
listView1.ListViewItemSorter = new ListViewItemComparer(A);
listView1.Sort();

class ListViewItemComparer : IComparer
{
private int col;
public ListViewItemComparer()
{
col = 0;
}
public ListViewItemComparer(int column)
{
col = column;
}
public int Compare(object x, object y)
{
return String.Compare(((ListViewItem)x).SubItems[col].Text,
((ListViewItem)y).SubItems[col].Text);
}
}

Otra solucion
public int Compare(object x, object y)
{
int result > String.Compare(((ListViewItem)x).SubItems[colA].Text,
((ListViewItem)y).SubItems[colA].Text);
if (result == 0)
result > String.Compare(((ListViewItem)x).SubItems[colB].Text,
((ListViewItem)y).SubItems[colB].Text));

return result;
}


La clase ListViewItemComparer la enlazas con listView:

lvwColumnSorter = new ListViewColumnSorter();
listView1.ListViewItemSorter = lvwColumnSorter;

Saludos.

"alfonso_C#" escribió en el mensaje
news:
Gracias Vyacheslav, te refieres a ordenar con algun metodo del ListView
una columna y luego la otra ?


Vyacheslav Popov ha escrito:

> Hola Alonso,
>
> Me ocurre lo siguiente: si tienes que ordenar por dos campos A y B ordena
> primero por el campo B y luego por el campo A
>
> -desordenado
> A B
> 2 b
> 1 a
> 2 a
> 1 b
>
> -1ª ordenacion
> A B
> 1 a
> 2 a
> 1 b
> 2 b
>
> -2ª ordenacion
> A B
> 1 a
> 1 b
> 2 a
> 2 b
>
> Saludos.
>
>
>
> "alfonso_C#" escribió en el mensaje
> news:
> Hola como andan ? . Queria confirmar si la logica que estoy aplicando
> es la correcta o hay otra forma de hacer lo que les voy a comentar:
>
> Tengo un ListView con Datos que han sido ingresados aleatoriamente a
> gusto del Usuario. Bien, este ListView tiene varias Columnas o SubItems
> y estos datos debo ordenarlos por 2 de esas columnas. Hasta donde tengo
> entendido solo se puede ordenar 1 sola columna del ListView por ese
> motivo he decidido usar una DataTable para llenarla con la misma data
> del ListView y ordenar este por medio de un DataView y procesar los
> datos a partir de alli. ¿Esto esta bien? ¿El camino que escogí es el
> mas largo? ¿Existe una manera mas sencilla de hacer eso ?. P.D.: Solo
> estoy trabajando con datos en memoria no directamente con Base de
> Datos, o sea nada de DataBinding ni nada de esas cosas. Agradecido por
> sus comentarios. :)
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida