使用devExpress的cxGrid,我希望能够在鼠标离开刚刚编辑的Cell或当按Enter时,知道用户输入的新值,在OnEditValueChanged中,得到的都是原来的值,而不是新输入的值。
请问如何解决
在cxGrid中,我使用GridtableView,命名tbvTest,建立了三列:tbvTestColumn1,tbvTestColumn2,tbvTestColumn2
在Column3的onGetProperties中在不同行建立了不同的Editor
代码如下:unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, cxStyles, cxCustomData, cxGraphics, cxFilter, cxData,
cxDataStorage, cxEdit, cxCheckComboBox, cxGridCustomTableView,
cxGridTableView, cxControls, cxGridCustomView, cxClasses, cxGridLevel,
cxGrid, Menus, cxLookAndFeelPainters, StdCtrls, cxButtons, cxCheckGroup,
cxRadioGroup,cxCheckBox;type
TForm1 = class(TForm)
cxGrid1Level1: TcxGridLevel;
cxGrid1: TcxGrid;
tvTest: TcxGridTableView;
tvTestColumn1: TcxGridColumn;
tvTestColumn2: TcxGridColumn;
tvTestColumn3: TcxGridColumn;
cxButton1: TcxButton;
procedure cxButton1Click(Sender: TObject);
procedure tvTestColumn3GetProperties(Sender: TcxCustomGridTableItem;
ARecord: TcxCustomGridRecord;
var AProperties: TcxCustomEditProperties);
procedure tvTestEditValueChanged(Sender: TcxCustomGridTableView;
AItem: TcxCustomGridTableItem);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.cxButton1Click(Sender: TObject);
var
i:integer;
begin
tvTest.DataController.RecordCount:=5;
for i:=0 to 4 do begin
tvTest.DataController.SetValue(i,1,'阿斯顿');
tvTest.DataController.SetValue(i,2,'A');
end;
end;procedure TForm1.tvTestColumn3GetProperties(Sender: TcxCustomGridTableItem;
ARecord: TcxCustomGridRecord; var AProperties: TcxCustomEditProperties);
var
c:TcxCheckgroupItem;
p:TcxCheckGroupProperties;
a:TcxRadioGroupProperties;
begin
case ARecord.RecordIndex of
0: begin
p:=TcxCheckGroupProperties.Create(self);
(tvTestColumn3.Properties as TcxCheckgroupProperties).Items.Clear;
c:=p.Items.Add;
c.Caption:='你好';
c:=p.Items.Add;
c.Caption:='我好';
c:=p.Items.Add;
c.Caption:='他也会有';
AProperties:=p;
end;
1: begin
p:=TcxCheckGroupProperties.Create(self);
(tvTestColumn3.Properties as TcxCheckgroupProperties).Items.Clear;
c:=p.Items.Add;
c.Caption:='你好';
c:=p.Items.Add;
c.Caption:='我好';
AProperties:=p;
end;
2: begin
a:=TcxRadioGroupProperties.Create(self);
a.Items.Add.Caption:='天内';
a.Items.Add.Caption:='功能';
AProperties:=a;
end;
end;
end;procedure TForm1.tvTestEditValueChanged(Sender: TcxCustomGridTableView;
AItem: TcxCustomGridTableItem);
var
i:integer;
s:string;
begin
i:=tvTest.DataController.GetEditingRecordIndex;
tvTest.ViewData.GetDisplayText(i,2,s);
showmessage(s);
// showmessage(Sender.DataController.GetDisplayText(i,2));
end;
end.
请问如何解决
在cxGrid中,我使用GridtableView,命名tbvTest,建立了三列:tbvTestColumn1,tbvTestColumn2,tbvTestColumn2
在Column3的onGetProperties中在不同行建立了不同的Editor
代码如下:unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, cxStyles, cxCustomData, cxGraphics, cxFilter, cxData,
cxDataStorage, cxEdit, cxCheckComboBox, cxGridCustomTableView,
cxGridTableView, cxControls, cxGridCustomView, cxClasses, cxGridLevel,
cxGrid, Menus, cxLookAndFeelPainters, StdCtrls, cxButtons, cxCheckGroup,
cxRadioGroup,cxCheckBox;type
TForm1 = class(TForm)
cxGrid1Level1: TcxGridLevel;
cxGrid1: TcxGrid;
tvTest: TcxGridTableView;
tvTestColumn1: TcxGridColumn;
tvTestColumn2: TcxGridColumn;
tvTestColumn3: TcxGridColumn;
cxButton1: TcxButton;
procedure cxButton1Click(Sender: TObject);
procedure tvTestColumn3GetProperties(Sender: TcxCustomGridTableItem;
ARecord: TcxCustomGridRecord;
var AProperties: TcxCustomEditProperties);
procedure tvTestEditValueChanged(Sender: TcxCustomGridTableView;
AItem: TcxCustomGridTableItem);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.cxButton1Click(Sender: TObject);
var
i:integer;
begin
tvTest.DataController.RecordCount:=5;
for i:=0 to 4 do begin
tvTest.DataController.SetValue(i,1,'阿斯顿');
tvTest.DataController.SetValue(i,2,'A');
end;
end;procedure TForm1.tvTestColumn3GetProperties(Sender: TcxCustomGridTableItem;
ARecord: TcxCustomGridRecord; var AProperties: TcxCustomEditProperties);
var
c:TcxCheckgroupItem;
p:TcxCheckGroupProperties;
a:TcxRadioGroupProperties;
begin
case ARecord.RecordIndex of
0: begin
p:=TcxCheckGroupProperties.Create(self);
(tvTestColumn3.Properties as TcxCheckgroupProperties).Items.Clear;
c:=p.Items.Add;
c.Caption:='你好';
c:=p.Items.Add;
c.Caption:='我好';
c:=p.Items.Add;
c.Caption:='他也会有';
AProperties:=p;
end;
1: begin
p:=TcxCheckGroupProperties.Create(self);
(tvTestColumn3.Properties as TcxCheckgroupProperties).Items.Clear;
c:=p.Items.Add;
c.Caption:='你好';
c:=p.Items.Add;
c.Caption:='我好';
AProperties:=p;
end;
2: begin
a:=TcxRadioGroupProperties.Create(self);
a.Items.Add.Caption:='天内';
a.Items.Add.Caption:='功能';
AProperties:=a;
end;
end;
end;procedure TForm1.tvTestEditValueChanged(Sender: TcxCustomGridTableView;
AItem: TcxCustomGridTableItem);
var
i:integer;
s:string;
begin
i:=tvTest.DataController.GetEditingRecordIndex;
tvTest.ViewData.GetDisplayText(i,2,s);
showmessage(s);
// showmessage(Sender.DataController.GetDisplayText(i,2));
end;
end.
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货