Bonjour,
Qu'il y ait des erreurs c'est logique un DBGrid n'a pas de FieldByName c'est son datasource associé qui en a.
Je suis assez rouillé avec VCL. mais je releve d'abord une chose qui me parait incorrecte
1 2 3 4
| if DBGrid1.SelectedRows.Count > 0 then
begin
....
end; |
Tester sur SelectedRows.Count implique généralement que une ou plusieurs ligne de la grille sont sélectionnées et donc on debrait avoir à l'intérieur un traitement de chaque ligne de la sélection du type
1 2 3
| for i:=0 to DBGrid1.SelectedRows.Count-1 do
begin // traitement
end; |
Si je comprend bien l'image numero 1 c'est plutôt l'enregistrement en cours qui est à cloturé (mettre les options de grille dgRawSelected et dgAlwaysShowSelection serait un plus permettant de bien montrer la ligne)
Dans ce cas il est plus simple d'utiliser directement les champs du dataset que de faire une assignation possible mais alambiquée
Attention ce qui suivra n'est pas forcément juste ne connaissant pas la structure de ClientDataset1, de plus je ne me souviens jamais si Fields commence à 0 ou 1 
1 2 3 4 5 6 7
| FrmIncident.DateTimePicker3.Time:=ClientDataset1.Fields[1].AsDateTime;
FrmIncident.CheckBoxEleve.checked := ClientDataset1.Fields[2].AsBoolean;
FrmIncident.CheckBoxMajeur.checked := ClientDataset1.Fields[3].AsBoolean;
FrmIncident.ComBoBoxSite.Text := ClientDataset1.Fields[4].AsString;
FrmIncident.CheckBoxTousSites.checked := ClientDataset1.Fields[5].AsBoolean;
FrmIncident.ComboBoxService.text := ClientDataset1.Fields[6].AsString;
FrmIncident.CheckBoxTousServices.checked := ClientDataset1.Fields[7].AsBoolean; |
De plus je suis plus partisan, pour des questions de maintenance logicielle, d'utiliser FieldByName car l'ordre des champs (trop ?) est facilement modifiable
FrmIncident.DateTimePicker3.Time:=ClientDataset1.FieldByName('nomdelacolonne').AsDateTime;
enfin les champs sont-ils des booleens ? pas sûr je lis true/false dans la grille (tiens, Carquefou, j'en suis pas loin)
donc pour les checkbox*
FrmIncident.CheckBoxEleve.checked := ClientDataset1.FieldbyName('nomcolonnesbool').AsString='true';
* les versions récentes permettent de transformer 'true'/'false' en boolean mais sans votre version j'écris un "traitement" sûr
Partager