01 octubre 2008

¿Cómo permitir al usuario eliminar filas en un "Data Grid"/"Smart List"?

Descripción del problema:

Pongamos como ejemplo la siguiente tabla de datos, representada en un objeto tipo "kdatagrid":

Do cTablaEdit.$definefromsqlclass(iTituVen)
Do cTablaEdit.$sessionobject.$assign(iSessionObj) Returns #F
Do cTablaEdit.$select() Returns lStatus
Do cTablaEdit.$fetch(kFetchAll) Returns lStatus
Do cTablaEdit.$line.$assign(1)
Do cTablaEdit.$smartlist.$assign(kTrue)
If cTablaEdit.$linecount=0
Do cTablaEdit.$add()
End If

El problema parte de que mientras el usuario se mueve entre las celdas de la tabla, el atributo "cTablaEdit.$line" no cambia. En el ejemplo deseamos que el usuario pueda seleccionar la fila a borrar pulsando la tecla "F5", el asunto entonces es: ¿Cómo saber que número de fila (cTablaEdit.$line) debemos eliminar?

Solución:

On evCellChanged
Do cTablaEdit.$line.$assign(pVertCell)
On evKey
If pSystemKey=5
Yes/No message Eliminar registros {¿Desea realmente eliminar la línea de la tabla?}
If flag true
Do cTablaEdit.$remove(cTablaEdit.$line)
Do $root.$redraw()
End If
Process event and continue (Discard event)
End If

El evento evCellChanged, mantendrá seleccionada la línea o fila a borrar, de tal modo que el prodedimiento Do cTablaEdit.$dowork() actualizará finalmente la tabla en el servidor eliminando las filas marcadas para borrar.

No he encontrado un método mejor para solucionar este problema, no obstante (si usted querido lector lo tiene a bien), tal vez pueda sugerir algún otro procedimiento, de ser así lo ánimo a dejar su comentario en este blog.

Gracias por su atención.