Come suggerisce Riccardo, l'evento da usare è l'OnDynamicProperties. Però c'è qualcosa che si può aggiungere.
Effettuando il controllo nell'OnDynamicProperties non viene presa in considerazione la riga corrente, ma l'ultima attualmente visibile. Questo non è né un bene né un male, ma occorre valutare quale evento usare a seconda dell'effetto che si vuole ottenere.
L'evento di
OnDynamicProperties è un evento ricorrente che permette di modificare le proprietà delle singole celle della lista. Quando si imposta
campo.enabled = false lo si imposta solo per una cella. Per la prossima riga il valore predefinito rimane quello di design time, o quello specificato in un evento non ricorrente come
form.Load.
L'evento di
OnChangeRow è invece indicato per modificare le proprietà di un bottone o di un campo fuori lista, perché questi ultimi sono legati alla riga corrente. Effettuando
campo.enabled = false viene disabilitata l'intera colonna, non la singola cella. Quando si modifica una proprietà di campo in un evento non ricorrente come questo è indispensabile che il codice rimetta anche le cose a posto.
Riassumendo:
1) onDynamicProperties per modificare le celle, della tabella o del dettaglio non importa in base al valore della riga di appartenenza
2) onChangeRow per modificare tutta una colonna o per cambiare le proprietà di un oggetto non ricorrente, come un bottone, a seconda della riga selezionata.