Borrar Registro En Listview/gridview


Objetivo: Borrar Registro En Listview/gridview
Por favor alguien me puede decir como eliminar de un listview y de un gridview el registro seleccionado
gracias

Perfil MP  
Objetivo: 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

última edición por soplo el Domingo, 22 Noviembre 2009, 20:33; editado 2 veces
Perfil MP  
Objetivo: Re: Borrar Registro En Listview/gridview
gracias por las explicaciones

Perfil MP  
Objetivo: Re: Borrar Registro En Listview/gridview
Respecto a como borrar un registro del GridView he visto esta solución por ahí.

GridView.Rows.Remove (GridView.Row) ' Te borra el registro actual

Perfil MP  
Objetivo: Re: Borrar Registro En Listview/gridview
Como dijo soplo en su anterior post, los listview/gridview no tienen registros, sino filas.

Llamamos registros a las entradas de una base de datos, no a su representación en un gridview, que se llaman filas (aunque provienen efectivamente de registros de la base de datos).

Si estás llenando tu gridview con datos de una base de datos, y lo que quieres es eliminar un registro de la bd y por consiguiente la fila correspondiente de tu gridview, entonces lo que deberías hacer es repetir el proceso de "llenado" de tu gridview, es decir, actualizarlo.

También depende del método que uses para hacerlo, mediante un bucle que recorre los registros de la bd y va llenendo celdas, o bien usando el evento _Data del gridview.

Saludos

Perfil MP  
Objetivo: Re: Borrar Registro En Listview/gridview
jguardon escribió: [Ver mensaje]
Como dijo soplo en su anterior post, los listview/gridview no tienen registros, sino filas.

Llamamos registros a las entradas de una base de datos, no a su representación en un gridview, que se llaman filas (aunque provienen efectivamente de registros de la base de datos).

Si estás llenando tu gridview con datos de una base de datos, y lo que quieres es eliminar un registro de la bd y por consiguiente la fila correspondiente de tu gridview, entonces lo que deberías hacer es repetir el proceso de "llenado" de tu gridview, es decir, actualizarlo.

También depende del método que uses para hacerlo, mediante un bucle que recorre los registros de la bd y va llenendo celdas, o bien usando el evento _Data del gridview.

Saludos



Hola, yo a lo que me refiero con registro efectivamente es a una fila del gridview o el registro actual seleccionado del propio gridview. Leyendo el post que hace destroyer no queda claro si el se refiere a un registro del control o de la Base de Datos, es mas, yo he interpretado que se refiere al registro del control porque en su post dice "como eliminar de un listview y de un gridview el registro seleccionado". Por ningún lado comenta nada de Base de Datos.

Aparte de todo esto, en un programa que estoy haciendo, probé la opción de limpiar el gridview y luego llenarlo de nuevo y me parece una burrada porque dependiendo de los registros que tengas se va a notar mucho al "pintarlos". Yo si lo hago con 300 registros nada mas se nota mucho, por lo que lo solucioné de otra forma. Primero borro el registro de la base de datos que tengo seleccionado en el gridview (cn.exec("Delete from xxx.....")) y luego lo borro del grid de la manera que comenté en el post anterior.

Perfil MP  
Objetivo: Re: Borrar Registro En Listview/gridview
karpaga escribió: [Ver mensaje]
.

Aparte de todo esto, en un programa que estoy haciendo, probé la opción de limpiar el gridview y luego llenarlo de nuevo y me parece una burrada porque dependiendo de los registros que tengas se va a notar mucho al "pintarlos". Yo si lo hago con 300 registros nada mas se nota mucho, por lo que lo solucioné de otra forma. Primero borro el registro de la base de datos que tengo seleccionado en el gridview (cn.exec("Delete from xxx.....")) y luego lo borro del grid de la manera que comenté en el post anterior.


Eso es cierto, pero si usas el evento _Data para "llenar" el gridview no tendrás ese problema, ya que su particularidad es que sólo se dibujan las celdas visibles (y realmente sólo se le piden esos datos a la base de datos) siendo extremadamente rápido con cualquier número de filas y columnas. Y hablo de miles!!

Uso del evento Data para llenar un gridview
PRIVATE $hres AS Result

PUBLIC SUB Form_Open()

DIM sql as String

gridview.Columns.Count = 4
gridview.Columns[0].Text = ("Campo1")
gridview.Columns[1].Text = ("Campo2")
gridview.Columns[2].Text = ("Campo3")
gridview.Columns[3].Text = ("Campo4")

sql = "SELECT * FROM tuTabla"
$hres = conexion.Exec(sql)
gridview.Rows.Count = $hres.Count

END

'este es el manejador del evento Data
PUBLIC SUB gridview_Data(Row AS Integer, Column AS Integer)
$hres.MoveTo(Row)

' Esta línea sólo es para alternar los colores de las filas
IF row MOD 2 = 0 THEN gridview.Data.Background = Color.LightBackground
END


Evidentemente esto es un ejemplo y deberás adaptarlo a los campos de tu base de datos, pero siempre que haya cambios en el objeto $hres (de tipo Result), éstos se reflejarán inmediatamente en su representación en el gridview.

Si te surgen dudas, pregunta.

Saludos

Perfil MP  
Objetivo: Re: Borrar Registro En Listview/gridview
jguardon escribió: [Ver mensaje]

Eso es cierto, pero si usas el evento _Data para "llenar" el gridview no tendrás ese problema, ya que su particularidad es que sólo se dibujan las celdas visibles (y realmente sólo se le piden esos datos a la base de datos) siendo extremadamente rápido con cualquier número de filas y columnas. Y hablo de miles!!


Me imagino que de esta manera está enlazado el control directamente con la base de datos, no? No sabía nada acerca del evento data, es otra buena alternativa, ¿puede ser esto parecido o igual a cuando en VB6 se enlazaba un datacontrol a una tabla de la BBDD o a un recordset?

Saludos.

Perfil MP  
Objetivo: Re: Borrar Registro En Listview/gridview
Digamos que está "enlazado" al objeto result que se usa para obtener datos de una consulta...

Saludos

Perfil MP  
Objetivo: Re: Borrar Registro En Listview/gridview
Hola colega.
Te voy a decir como lo hago yo y espero que te sirva, como mínimo para conocer otra forma.

Declara un array con los campos que van a ocupar cada columna en el gridview y rellenalo así
PUBLIC arrCampos AS String[4]

arrCampos[0] = "campo1"
arrCampos[1] = "campo2"
arrCampos[2] = "numero1"
arrCampos[3] = "numero2"


en el evento data puedes controlarlo así


PUBLIC SUB gridview_Data(Row AS Integer, Column AS Integer)

rstped.MoveTo(row)
'Si es un numero lo alineo a la derecha y le doy el formato que quiera
IF Column > 1 THEN
grdped[Row, Column].Alignment = Align.Right
grdped.Data.Text = Format(rstped[arrCampos[Column]], "#0.0000")
ELSE
grdped.Data.Text = rstped[arrCampos[Column]]
ENDIF

END


Espero que te sirva

Perfil MP  

Página 1 de 1


  
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas
No puede adjuntar archivos
Puede descargar archivos
No puede publicar eventos en el calendario

   

Está utilizando la versión (Lo-Fi). Para ver la versión completa del foro, haga clic aquí.

Powered by Icy Phoenix based on phpBB
Design by DiDiDaDo

Página generada en:: 0.1087s (PHP: 0% SQL: 100%)
Consultas SQL: 23 - Debug off - GZIP Activado