Hay varias formas, la mas sencilla y fácil de mantener, es la de crear en la DW de tipo tabular dos campos: uno que se llame protegido y seteado en 1 y otro llamado selec seteado en 0:
select /*campos*/,
1 protegido,
0 selec
from /***/
Si quieres puedes usar uno solo, el llamado selec. Este campo es de tipo checkbox, con los valores 1 y 0 (elegido y no elegido).
Luego a cada campo de la DW, en la parte de propiedades, vas a ver una opción en la solapa general que se llama "protect". Si esta en 1 esta protegido, si esta en 0 es desprotegido. A cada campo le vas a colocar el nombre de la variable 'protegido'.
Como la primera vez que hagas retrieve va a estar esa variable en 1, todo estará protegido. Cuando hagas click en el campo selec, esta fila estará seleccionada, por lo tanto en el itemchanged vas a colocar lo siguiente:
IF row > 0 THEN
IF This.GetColumnName() = 'selec' THEN
IF data = '1' THEN
this.setitem(row, 'protegido', 0)
ELSE
this.setitem(row, 'protegido', 1)
END IF
this.accepttext()
END IF
END IF
Return 0
De esta forma, proteges o desproteges cada fila seleccionada.