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 ?
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
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
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??
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!
@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