0

这是我如何将数据输入数据库的非常简短的描述。

procedure TMain_Form.AdvGlowButton1Click(Sender: TObject);
begin
MYQUERY.Close;
MYQUERY.SQL.Clear;
MYQUERY.SQL.Add('INSERT INTO MYTABLE (FOR_DATE,SOMETEXT) VALUES(:a1,:a2)');
MYQUERY.Params.ParamByName('a1').asDate :=PlannerCalendar1.Date;
MYQUERY.Params.ParamByName('a2').Value :=cxMemo1.Lines.Text ;
MYQUERY.ExecSQL;
end;

这工作正常。数据被插入。它显示在 cxGrid1 中。

现在,我想做的是从这个 cxGrid1 复制整个记录(仅选定的记录)并将其粘贴(插入)到不同的日期,即在 PlannerCalendar1 中选定的日期。

我使用“发送到所选日期”选项实现了 cxgridpopup 菜单,但我不知道如何从 cxGrid1 复制基础数据。

目标是在日历中选择一个日期,然后转到 cxGrid1,选择一条记录,右键单击它并(使用弹出菜单选项),然后将整个选定的记录插入到新选择的日期。基本上是克隆记录但到不同的日期。我怎样才能做到这一点 ?

(PlannerCalendar1 是一个 TMS 组件)

编辑:在这里找到一些信息https://www.devexpress.com/Support/Center/Question/Details/A302 但不确定它是否适合我的情况。

编辑:我试过这种方式,它不会工作:

 Procedure CopyTableRecord(View: TcxGridTableView; IndexToCopy : Integer);
var i:integer;
PlannerCalendar1:TPlannerCalendar;
Begin
  View.DataController.Insert;
  For I := 0 To Pred(View.ColumnCount) Do
    View.Columns[I].EditValue := view.DataController.Values[1, I];
  View.Columns[1].EditValue := PlannerCalendar1.Date;
  View.DataController.Post(True);
End;

procedure TMain_Form.Sendto1Click(Sender: TObject);
begin
CopyTableRecord(cxGrid1DBTableView1, cxGrid1DBTableView1.DataController.FocusedRecordIndex);
end;
4

2 回答 2

1

我将数据和视图分开。那么为什么不走与插入新记录相同的路径呢?

procedure TMain_Form.Sendto1Click(Sender: TObject);
begin
  MYQUERY.Close;
  MYQUERY.SQL.Clear;
  MYQUERY.SQL.Add('INSERT INTO MYTABLE (FOR_DATE, SOMETEXT) SELECT :a1, SOMETEXT FROM MYTABLE WHERE FOR_DATE = :a2');
  MYQUERY.Params.ParamByName('a1').asDate :=PlannerCalendar1.Date;
  MYQUERY.Params.ParamByName('a2').asDate := cxGrid1DBTableView1.DataController.Values[cxGrid1DBTableView1.DataController.FocusedRecordIndex,1];
  MYQUERY.ExecSQL;
end;

注意:除非特定日期有多个记录,否则此解决方案应该有效。我想,没有。如果有,则不应按日期选择,而应按主键列选择。

于 2015-09-04T12:41:59.877 回答
0

DataController您可以使用您正在使用的andColumns属性克隆记录,cxGridTableView如下所示:-

Procedure CopyTableRecord(View: TcxGridTableView; IndexToCopy : Integer);
Begin
  View.DataController.Insert;
  For I := 0 To Pred(View.ColumnCount) Do
    View.Columns[I].EditValue := View.DataController.Values[IndexToCopy, I];
  // Modify your Date field here...
  View.DataController.Post(True);
End;

将网格视图传递FocusedRecordIndex给上述例程。

于 2015-09-03T07:51:07.857 回答