Si utilizas Grids para captura en linea, quizás quieras limitar que ciertas filas no puedan ser modificadas, es decir, dejarlas como de sólo lectura....
Quizás te resulte algo truculento, pero en realidad sirve... Puedes hacer a TODO el grid de sólo lectura, y cuando se cambie de registro, poner en .T. o .F. el valor de la propiedad ReadOnly (del Grid) según sea tu condición...
Veamos un ejemplo:
public oForm oForm = CREATEOBJECT("MyForm") oForm.Show() DEFINE CLASS MyForm AS Form ADD OBJECT MyGrid AS Grid PROCEDURE LOAD CREATE CURSOR Temp (nMes int,cMes c(15)) RAND(-1) FOR lnCounter=1 TO 20 lnMes = RAND()*11+1 INSERT INTO temp VALUES(lnMes,cMONTH(DATE(2003,lnMes,01))) ENDFOR ENDPROC PROCEDURE INIT WITH This.MyGrid .SetAll("DynamicBackColor", ; "IIF(RECNO()%2 =0,RGB(255,255,255), ; RGB(0,255,0))",; "Column") EndWith ENDPROC PROCEDURE UNLOAD USE IN SELECT("Temp") ENDPROC PROCEDURE MyGrid.AfterRowColChange LPARAMETERS nColIndex This.ReadOnly=(RECNO()%2 # 0) ENDPROC ENDDEFINE
Copia y Pega el código anterior en tu Command Window, selecciónalo y presiona ENTER, se ejecutará un formulario con un grid conteniendo valores obtenidos de una tabla llenada aleatoriamente, dicho grid le he pintado las filas impares (según el RECNO()), estas mismas líneas serán las que permanezcan de modo solo lectura, ¿Cómo realizaremos esto?, sencillo, en el método AfterRowColChange, si la fila actual es impar o no, pongo el valor de la propiedad ReadOnly a verdadero (.T.) o falso (.F.) según sea el caso.
Si, puede que sea muy "chapucero", pero funciona ;-), el chiste está en que debes establecer correctamente tu condicion de "Solo lectura" y hacerlo por medio del evento AfterRowColChange.
Este truco, se lo debemos a Drew Speddie!. Espero les sea de utilidad.
Espero que esta información les sea de utilidad.
Espartaco Palma Martínez
No hay comentarios. :
Publicar un comentario
Los comentarios son moderados, por lo que pueden demorar varias horas para su publicación.