[英]Delphi, cxGrid setting a column value and update the database
我从表中读取一些数据并将数据复制到 cxGrid 中的一列,然后我想将其直接更新到数据库中。 这怎么可能?
我试过使用 setEditValue 但那个需要一个类型的参数:
TcxDataEditValueSource = (evsValue, evsText, evsKey);
我找不到这种类型。 在 DeveloperExpress 的一些示例中,他们将其设置为 1,但这不起作用。 错误的类型说是编译器。
这是我用来将数据放入网格的代码,但是我可以让它更新数据集吗?
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;
我是这样解决的:
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;
grGeneralInfoMallDBTableView1.DataController.DataSource.DataSet.Edit;
grGeneralInfoMallDBTableView1.DataController.DataSource.DataSet.FieldByName('AT').Value := AT;
grGeneralInfoMallDBTableView1.DataController.DataSource.DataSet.FieldByName('AB').Value := AB;
grGeneralInfoMallDBTableView1.DataController.DataSource.DataSet.Post;
finally
end;
end;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.