Re: Borrar Registro En Listview/gridview
No se borran registros. Ni gridview ni listview trabajan con registros. Trabajan con filas. Tu quieres borrar una fila.
El caso del listview funciona igual que el treeview y el columnview. Todos estos controles que organizan sus filas mediante una clave bien para mostrar una estructura jerárquica (columnview y treeview) como para mostrar un icono y un texto (listview) funcionan igual.
Siempre tienes dos cursores. Uno el cursor físico que es donde tu te pones con el ratón y el teclado. A las propiedades y métodos de este item accedes mediante la propiedad current
Listview.current.text ---> devuelve el texto donde estas
listview.current.key ---> devuelve la clave donde estás
Treeview.current.text ---> devuelve el texto donde estas
Treeview.current.key ---> devuelve la clave donde estás
Columnview.current.text ---> devuelve el texto donde estas
Columnview.current.key ---> devuelve la clave donde estás
Pero a partir de ahi tu te puedes mover con el cursor lógico. Lo haces mediante moveparent, movechild, moveabove, moveback,movefirst,movelast,movenext,moveprevious,moveto. Con ellos lo que haces es mover el cursor lógico a otro sitio que te interesa.
¿Porque vas a otro sitio? Pues por varias razones. Una de ellas es porque quieres saber algo de ese otro sitio (por ejemplo su key)
Cuando te vas a otro sitio el cursor físico sigue en el mismo sitio. Para acceder al lugar donde te has ido accedes a traves de item
Listview.item.text ---> devuelve el texto donde está el cursor lógico
listview.item.key ---> devuelve la clave donde está el cursor lógico
Treeview.item.text ---> devuelve el texto donde está el cursor lógico
Treeview.item.key ---> devuelve la clave donde está el cursor lógico
Columnview.item.text ---> devuelve el texto donde está el cursor lógico
Columnview.item.key ---> devuelve la clave donde está el cursor lógico
y resulta que todos estos controles tienen un método llamado en el caso de tu duda REMOVE que requiere como argumento la clave del que quieres borrar.
Así que si tu quieres pinchar uno y que se borre harás
listview.remove(listview.current.key) ---> borras aquel cuya clave es la clave donde estás.
y si quieres borrar al de abajo haces
listview.movenext
listview.remove(listview.item.key) ---> mueves el cursor lógico al de abajo, ves su clave y se la das como argumento al método remove
¿Me he explicado?
El caso del gridview es distinto porque allí los elementos no se organizan por claves.
En un gridview no tienes el método remove. Hay varias cosas que puedes hacer. Para no entrar a discutir todas ellas, la más fácil que veo es simplemente hacer un clear (que lo borra todo menos la cabecera) y rellenar de nuevo. Por eso yo suelo tener una rutina que es la que llena el gridview y que la llamo cada vez que la necesito.
Private sub BorrarFila()
aquí haces lo que sea para que ese dato no esté en la tabla o array o lo que sea
y luego llenas de nuevo
llenarCuadro()
end sub
Y tienes una rutina que es la de rellenar. Te pasteo una que tengo que pone los datos formateados y con las filas a dos colores para que hagas algunas pruebas. Naturalmente tendrás que adaptarlas a tu caso
En este caso yo leía una tabla y dejaba algunos datos en un gridview llamado cuadro y la rutina de llenar es esta:
PRIVATE SUB LlenarCuadro(Cn AS Connection, Rs AS Result)
DIM MiColor AS Integer, MiColor2 AS Integer, Contador AS Integer = 0
cuadro.Clear 'borrar gridview
rs.MoveLast 'ir al final para saber cuantos registros tengo
cuadro.Rows.count = rs.Count 'poner tantas filas como registros
rs.MoveFirst 'volver al principio
DO WHILE rs.Available
micolor = IIf(rs!cactivo, Color.Black, Color.DarkGray)
micolor2 = IIf(rs!cactivo, Color.White, Color.LightBackground)
cuadro[contador, 0].ForeColor = micolor 'se van alternando un color de tinta y de papel
cuadro[Contador, 0].text = rs!codigo
cuadro[contador, 0].backcolor = micolor2
cuadro[contador, 1].ForeColor = micolor
cuadro[Contador, 1].text = rs!contrato
cuadro[contador, 1].backcolor = micolor2
cuadro[contador, 2].ForeColor = micolor
cuadro[Contador, 2].text = rs!nombre
cuadro[contador, 2].backcolor = micolor2
cuadro[contador, 3].ForeColor = micolor
cuadro[Contador, 3].text = rs!externo
cuadro[contador, 3].backcolor = micolor2
cuadro[contador, 4].ForeColor = micolor
cuadro[Contador, 4].text = rs!f_inicio
cuadro[contador, 4].backcolor = micolor2
cuadro[contador, 5].ForeColor = micolor
cuadro[Contador, 5].text = rs!f_fin
cuadro[contador, 5].backcolor = micolor2
contador += 1
rs.MoveNext
LOOP
Tómalo a modo de ejemplo