ListView Y SUBITEMS ( C# )

Iniciado por Codename!!, 22 Marzo 2010, 23:30 PM

0 Miembros y 1 Visitante están viendo este tema.

Codename!!

Buenas, tengo una duda, se que para añadir items a un listview se hace asi :

ListViewItem item1 = new ListViewItem("item1",0);
            // Place a check mark next to the item.
            item1.Checked = true;
            item1.SubItems.Add("1");
            item1.SubItems.Add("2");
            item1.SubItems.Add("3");


peeeeeeeeero....

si ya tienes el item añadido de antes y simplemente quieres añadirle ahora un subitem???
tengo que borrarlo y hacerlo de esa manera??? supongo que habra alguna manera no ?
No te dejes mover por las masas, se tu mismo.





raul338

#1
Código (csharp) [Seleccionar]

ListViewItem item = listview.Items.Find("TextoDelItem");
item.SubItems.Add("xD");


Segun mis recuerdos eso no me funciono JAJA XD, ahora te doy otro ejemplo que si me funciono (pero era de menor rendimiento)



Edit: Codigo extraido del intento de pasar un codigo de vb6 a .net, pero lo deje por vagancia y otros temas :P

Código (vbnet) [Seleccionar]

For Each i As ListViewItem In lstVentanas.Items
                           ' NOTA: Aca no se porque, pero no me funciono ni el Find, FindKey, Contains de ListView
                           '       para saber si ya estaba puesto el item :(
                           '       Por lo tanto tuve que hacer esta "robusta" comparacion

                           tempHandle = CType(i.Tag, IntPtr)

                           '' Primero nos fijamos si la ventana sigue existiendo, si no, la eliminamos
                           If IsWindow(tempHandle) Then
                               '' Esta en la lista, por lo tanto lo actualizamos
                               If hwnd = tempHandle Then
                                   insert = False
                                   If titulo <> i.Text Then i.Text = titulo
                                   If i.SubItems(1).Text <> IsWindowVisible(hwnd).ToString() Then i.SubItems(1).Text = IsWindowVisible(hwnd).ToString()
                               End If
                           Else
                               '' No existe mas ese handle, la borramos de la lista
                               lstVentanas.Items.Remove(i)
                           End If
                       Next


Lo que hacia el code era verificar si el item existia, por lo cual ninguna de las funciones que traia el listview me funciono, y lo tuve que buscar a mano. Si existia lo actualizaba, y si no existia mas la ventana la eliminaba

El proyecto era un ocultador de ventanas "para privacidad" :rolleyes: que salio en vb6, cuando lo quise pasar a .net para ampliarlo lo deje en el camino jeje

Codename!!

Hola otra vez!

mira lo que he encontrado y funciona!

ListViewItem itemEncontrado = listView1.FindItemWithText(a,true,0);

Lo del true,0 eso se puede omitir pero bueno.


pero lo que sigo sin poder hacer es si tengo 3 columnas, y quiero meter datos en la columna 3 sin meter nada en la columna dos no puedo!!

he probgado esto:
itemEncontrado.SubItems[INDEX DE MI COLUMNA].Text=("hola caracola");

pero me salta un error como que me he salido del array...solo me deja poner el 0 y entonces sobrecribe lo que hay en la 1º columna...



solo me funciona poniendo a mano esto:
ListViewItem itemEncontrado = listView1.FindItemWithText(a,true,0);
            itemEncontrado.SubItems.Add("");
            itemEncontrado.SubItems.Add("Hola Caracola,estoy en la 3º columna");

Pero esto ultimo es un poco timo....


argg! a alguien se le ocurre como??
No te dejes mover por las masas, se tu mismo.





[D4N93R]

La mejor manera, que he encontrado yo, para identificar items de un ListView es al momento de crear el item le añades el objeto de referencia en la propiedad TAG.. en caso de que estes usando objetos...

Sino es mejor con el Name, o algo, pero NO con el Text ya que en caso de que varíe pierde la identidad..


Un saludo!

raul338

@D4N93R: Si ves mi codigo, veras que hago eso :P

@Codename: Es ovbio, si el item no tiene subcolumnas no podes modificarlas. Pero el metodo Add creo que tiene una sobrecarga que puedes especificar el id o nombre de la columna a la que quieras agregar