J'ai lu certaines données d'une table et copié les données dans une colonne dans un cxGrid, puis je veux mettre à jour directement à la base de données. Hows that possible?Delphi, cxGrid définir une valeur de colonne et mettre à jour la base de données
J'ai essayé d'utiliser setEditValue mais que l'on a besoin d'un paramètre de type:
TcxDataEditValueSource = (evsValue, evsText, evsKey);
Et je ne peux trouver ce type. Dans un exemple de DeveloperExpress, ils le définissent sur 1, mais cela ne fonctionne pas. C'est un mauvais type, disons le compilateur.
Ceci est le code que j'ai utilisé pour faire les données dans la grille, mais comment puis-je mettre à jour le jeu de données?
var
RecIDx,
ColIdx,
sorNo,
RecID,
i: integer;
AB,
AT: double;
begin
try
// Get marked row and column
RecIDx := grGeneralInfoMallDBTableView1.Controller.SelectedRecords[0]
.RecordIndex;
ColIdx := grGeneralInfoMallDBTableView1.DataController.GetItemByFieldName
('ID').Index;
// Get SortingOrderNo
sorNo := grGeneralInfoMallDBTableView1.DataController.Values
[RecIDx, ColIdx];
// Get AB and AT from SortingOrderRow with highest priority (lowest number)
dmsSortOrder.sq_Get_AB_AT.Active := false;
dmsSortOrder.sq_Get_AB_AT.ParamByName('sorNo').AsInteger := sorNo;
dmsSortOrder.sq_Get_AB_AT.Active := true;
dmsSortOrder.sq_Get_AB_AT.First;
if dmsSortOrder.sq_Get_AB_AT.EOF then
begin
showMessage('ERROR! Could not find record for sortorder: ' +
intToStr(sorNo));
exit;
end;
// Copy AT and BT to the grid.
AT := dmsSortOrder.sq_Get_AB_AT.FieldByName('AT').AsFloat;
AB := dmsSortOrder.sq_Get_AB_AT.FieldByName('AB').AsFloat;
// Set the cell value
grGeneralInfoMallDBTableView1.DataController.DataSource.DataSet.Edit;
ColIdx := grGeneralInfoMallDBTableView1.DataController.GetItemByFieldName
('AT').Index;
grGeneralInfoMallDBTableView1.DataController.SetValue(RecIDx,ColIdx, AT);
ColIdx := grGeneralInfoMallDBTableView1.DataController.GetItemByFieldName
('AB').Index;
grGeneralInfoMallDBTableView1.DataController.SetValue(RecIDx,ColIdx, AB);
grGeneralInfoMallDBTableView1.DataController.DataSource.DataSet.Post;
finally
end;
end;
Si votre GridView est lié aux données que vous devriez être en mesure de mettre à jour simplement les champs de la 'TDataSet' sous-jacent. – nil
Tu me réveilles vraiment! J'ai changé le code ci-dessus pour montrer comment je l'ai fait. Simple et je n'ai pas besoin d'ajouter des données à la grille de cette façon. Merci! – larand
Votre bienvenue. En passant, vous avez maintenant changé votre question pour ne plus être question. Il vaudrait mieux revenir sur ce changement à la question. Il est absolument bon de poster votre propre réponse avec la façon dont vous l'avez résolu. – nil