2016-11-02 5 views
0

Avec DBGrid, nous pouvons définir une colonne en lecture seuleDBGrid mis une cellule en lecture seule

DBGrid1.Columns[C].ReadOnly := True; 

Dans mon cas, je dois mettre une cellule (et pas toutes les cellules dans cette colonne) comme lu seulement.

dbgrid

Vous pouvez voir à mon image, si j'ai « No » valeur field1 nous devrions activer modifier sur le champ Tx. Mais si j'ai la valeur "Yes", nous devrions définir Tx comme ReadOnly.

Est-il possible de faire cela?

+1

Dupliquer: http://stackoverflow.com/questions/16042975/set-some-cells-in-tdbgrid-to-editable –

Répondre

6

Oui, c'est possible. La clé d'une solution à ce problème est le fait que le curseur de jeu de données de l'ensemble de données connecté à la grille est synchronisé avec la ligne courante dans la grille, en raison de la façon dont TDBGrid est codé. Par conséquent, tout ce que vous devez faire est de configurer un événement AfterScroll pour l'ensemble de données et de mettre votre code pour définir la propriété ReadOnly de la grille dans celui-ci. Dans mon cas, les travaux amende suivante:

procedure TForm1.CDS1AfterScroll(DataSet: TDataSet); 
begin 
    DBGrid1.Columns[4].ReadOnly := Odd(CDS1.FieldByName('ID').AsInteger); 
end; 

Il est évident que, dans votre cas, vous pouvez tester le contenu de votre champ Oui/Non.

Si vous souhaitez que la grille réagisse immédiatement à une modification de la valeur du champ que vous utilisez pour déterminer si la colonne doit être en lecture seule, vous devez exécuter le même code dans l'événement AfterEdit de l'ensemble de données.

+0

@ user6751794: Avez-vous répondu à ce q? – MartynA