cxgrid 计算列的问题

zqycn 2011-09-13 12:52:55
interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Fa_TEAJX_ADDS, cxGraphics, cxControls, cxLookAndFeels,
cxLookAndFeelPainters, cxContainer, cxEdit, dxSkinsCore,
dxSkinsDefaultPainters, cxStyles, dxSkinscxPCPainter, cxCustomData,
cxFilter, cxData, cxDataStorage, DB, cxDBData, cxDBExtLookupComboBox,
DBAccess, Uni, MemDS, StdCtrls, cxGridLevel, cxGridCustomTableView,
cxGridTableView, cxGridDBTableView, cxClasses, cxGridCustomView, cxGrid,
cxDropDownEdit, cxLookupEdit, cxDBLookupEdit, cxMaskEdit, cxCalendar,
cxDBEdit, cxTextEdit, ExtCtrls;

type
TF_CGTEA_ADD = class(TFa_TEAJX_ADD)
Edit1: TEdit;
Memo1: TMemo;
UniQuery_listSysTemID: TIntegerField;
UniQuery_listSPBM: TWideStringField;
UniQuery_listSPMC: TWideStringField;
UniQuery_listDJBM: TWideStringField;
UniQuery_listSPPZ: TWideStringField;
UniQuery_listSPCD: TWideStringField;
UniQuery_listCYXX: TWideStringField;
UniQuery_listSCJJ: TWideStringField;
UniQuery_listSPDJ: TCurrencyField;
UniQuery_listSPSL: TFloatField;
UniQuery_listSYSL: TFloatField;
UniQuery_listSPJE: TCurrencyField;
UniQuery_listSPGG: TWideStringField;
UniQuery_listRKRQ: TDateTimeField;
UniQuery_listCYMJ: TWideStringField;
UniQuery_listXSDJ: TCurrencyField;
UniQuery_listSPDW: TWideStringField;
UniQuery_listSPCR: TWideStringField;
UniQuery_listClaField: TBCDField;
cxGridDBTableView1ClaField: TcxGridDBColumn;
procedure FormShow(Sender: TObject);
procedure Button_addClick(Sender: TObject);
procedure cxGridDBTableView1EditKeyUp(Sender: TcxCustomGridTableView;
AItem: TcxCustomGridTableItem; AEdit: TcxCustomEdit; var Key: Word;
Shift: TShiftState);
private
uniquery_spdw:TUniQuery;
unidatasource_spdw:TUniDataSource;
uniquery_spgg:TUniQuery;
unidatasource_spgg:TUniDataSource;
uniquery_cypz:TUniQuery;
unidatasource_cypz:TUniDataSource;
uniquery_cyjj:TUniQuery;
unidatasource_cyjj:TUniDataSource;
uniquery_cyxx:TUniQuery;
unidatasource_cyxx:TUniDataSource;
uniquery_cycd:TUniQuery;
unidatasource_cycd:TUniDataSource;
{ Private declarations }
public
{ Public declarations }
end;

var
F_CGTEA_ADD: TF_CGTEA_ADD;
spdj,spsl,spje:Double;

implementation
USES CxGridfun,Common;
{$R *.dfm}

procedure TF_CGTEA_ADD.Button_addClick(Sender: TObject);
begin
inherited;
UniQuery_list.FieldByName('SPBM').Value:=GetMaxTableDateBH('CR_SPCG');
spdj :=0;
spsl :=0;
end;

procedure TF_CGTEA_ADD.cxGridDBTableView1EditKeyUp(
Sender: TcxCustomGridTableView; AItem: TcxCustomGridTableItem;
AEdit: TcxCustomEdit; var Key: Word; Shift: TShiftState);
begin
inherited;
if Tcxmaskedit(AEdit).text = '' then exit;
if AItem.Index =9 then spdj := StrToFloat(TcxTextEdit(AEdit).text);
if AItem.Index =10 then spsl := StrToFloat(TcxTextEdit(AEdit).text);
if (spdj <> 0) and (spsl <> 0) then
begin
Sender.datacontroller.setvalue(0,11,FloatToStr(spdj * spsl)); //这是一个计算方法,当在 spdj或spsl中输入值时
自动计算当前的值并修改SPJE的值,但是当在修改的时候,spdj 或 spsl 的显示值又变为空,而 spje 的值又没有错,请问这是什么原因,而在下面的方法显示计算值又没有问题?
Edit1.Text := FloatToStr(spdj * spsl);
end;
end;




...全文
293 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
zqycn 2011-09-21
  • 打赏
  • 举报
回复
虽然都不对,还是给分吧
littao 2011-09-16
  • 打赏
  • 举报
回复
在这一句if AItem.Index =10 then spsl := StrToFloat(TcxTextEdit(AEdit).text);后面加一行 Sender.DataController.Post;
jayqiang 2011-09-13
  • 打赏
  • 举报
回复
你把这些计算放在OnEditKeyUp事件里不妥,建议放在OnEditValueChanged里!
zqycn 2011-09-13
  • 打赏
  • 举报
回复
自己顶一下
iamduo 2011-09-13
  • 打赏
  • 举报
回复
Sender.datacontroller.setvalue
Sender.datacontroller.Post

不过好像放在这里事件里确实怪怪的。

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧