请教关于cxGrid中ButtonEdit之OnButtonClick事件的问题!

静远 2010-02-05 03:32:06
我在Frm1中cxGrid的其中两列分别设置properties为ButtonEdit,然后通过OnButtonClick事件调用另一个窗口(设为Frm2),并在Frm2中的数据修改提交后,在cxGrid中即时更新数据。

这是通过ButtonEdit的OnButtonClick事件引发:
procedure TFrmProjApplyMng.gdTVSignPropertiesButtonClick(Sender: TObject;
AButtonIndex: Integer);
var
i: Integer;
begin
inherited;
if not Assigned(FProjApply) then
FProjApply := TFrmProjApplyEx.Create(Self);
with cdsProjApply, FProjApply do
begin
CompressSelect('SELECT * FROM wp_ProjApply WHERE (RecordID = ''' + FieldByName('RecordID').AsString + ''')'
, cdsApply);
SetPageReadOnly(pnlMain, False);
SetPageReadOnly(gbInf, not btnOk.Visible);
SetPageReadOnly(mmProjContent, False);
btnOk.Visible := True;
FProjApply.ShowModal;
if CheckBack(FieldByName('RecordID').AsString) then
begin
Edit;
for i := 0 to FieldCount - 1 do
Fields[i].Value := cdsApply.FieldByName(Fields[i].FieldName).Value;
// edCorpName.Text := cdsApply.FieldByName('TypeID').AsString;
Post;
end;
end;
end;


这里通过Button的OnClick事件引发:
procedure TFrmProjApplyMng.btnViewClick(Sender: TObject);
var
i: Integer;
begin
inherited;
if not Assigned(FProjApply) then
FProjApply := TFrmProjApplyEx.Create(Self);
with cdsProjApply, FProjApply do
begin
CompressSelect('SELECT * FROM wp_ProjApply WHERE (RecordID = ''' + FieldByName('RecordID').AsString + ''')'
, cdsApply);
SetPageReadOnly(pnlMain, False);
SetPageReadOnly(gbInf, not btnOk.Visible);
SetPageReadOnly(mmProjContent, False);
btnOk.Visible := True;
FProjApply.ShowModal;
if CheckBack(FieldByName('RecordID').AsString) then
begin
Edit;
for i := 0 to FieldCount - 1 do
Fields[i].Value := cdsApply.FieldByName(Fields[i].FieldName).Value;
// edCorpName.Text := cdsApply.FieldByName('TypeID').AsString;
Post;

end;
end;
end;


两个事件中的代码是一样的,问题出在红色代码部分。
ButtonEdit的OnButtonClick事件可以实现数据的即时更新,但是会提示'control'' has no parent window',而Button的OnClick事件不会出现这种情况。
或者屏蔽红色块代码,也不会报错。
不知道有没有什么解决办法呢?这里我不想用Button。
CheckBack函数来自于Frm2
function TFrmProjApplyEx.CheckBack(AID: string): Boolean;
var
Str: string;
begin
Str := 'SELECT * FROM wp_ProjApply WHERE (RecordID = ''' + AID + ''')';
FCDSArr[0].SQL := Str;
GetCDS(FCDSArr, []);
Result := (ModalResult = mrOk); //数据成功提交后,Result为True.
end;

...全文
899 5 打赏 收藏 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
tgbd 2010-02-06
  • 打赏
  • 举报
回复
经测试,可以的啊。
在FORM1的CXGRID1的某列中,点击BUTTONEDIT事件中安排如下:
form2:=Tform2.create(self);
if form2.ShowModal=mrOK then
begin
adoquery1.close;adoquery1.open;
end;

没有报错的现象啊。
静远 2010-02-05
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 tgbd 的回复:]
理论上,两个FORM,一个调用另一个,例:form1调用form2,根据form2的返回值决定FORM1的刷新与否,
一般地可以安排在两个地方:一是FORM2中,即在完成操作并写数据成功后,刷新FORM1中的信息,
另一种是根据FORM2的表单返回结果,即Form2.ModalResult的结果,在FORM1的调用FORM2代码中操作,
例:if Form2.ModalResult then
    begin
      adoquery1.close;adoquery1.open;
    end;

供楼主参考。
[/Quote]
谢谢。我这里就是通过Frm2的ModalResult返回值来对Frm1进行刷新。
我现在的问题是:我在cxGrid里的其中一列添加了ButtonEdit,通过他来调用Frm2,在进行数据刷新的时候会报错"control '' has no parent window",如果不进行刷新,或者通过外面的Button调用Frm2进行刷新就不会报错。不知道该怎么解决?
tgbd 2010-02-05
  • 打赏
  • 举报
回复
理论上,两个FORM,一个调用另一个,例:form1调用form2,根据form2的返回值决定FORM1的刷新与否,
一般地可以安排在两个地方:一是FORM2中,即在完成操作并写数据成功后,刷新FORM1中的信息,
另一种是根据FORM2的表单返回结果,即Form2.ModalResult的结果,在FORM1的调用FORM2代码中操作,
例:if Form2.ModalResult then
begin
adoquery1.close;adoquery1.open;
end;

供楼主参考。
静远 2010-02-05
  • 打赏
  • 举报
回复
有没有朋友知道解决办法的?
有满意答案可加分。
先谢过!
静远 2010-02-05
  • 打赏
  • 举报
回复

编辑出错,上面提到的红色代码块为下面这段:
Edit;
for i := 0 to FieldCount - 1 do
Fields[i].Value := cdsApply.FieldByName(Fields[i].FieldName).Value;
// edCorpName.Text := cdsApply.FieldByName('TypeID').AsString;
Post;
内容概要:本文围绕直流最优潮流(DC-OPF)展开,深入剖析其建模逻辑与数学本质,系统阐述了从交流最优潮流(AC-OPF)向直流简化模型的转化路径,并强调了该模型作为线性规划问题在计算效率方面的显著优势。文章详细分析了简化过程中忽略无功功率、电压幅值变化及网损等物理量所带来的精度代价,明确划定了DC-OPF的应用精度边界。同时,全面梳理了其在电力市场出清、节点电价计算、发输电系统可靠性评估以及高比例新能源消纳调度等关键场景中的应用价值。最后,探讨了当前的研究前沿,涵盖网损近似的精细化处理、适用于大规模系统的分布式求解架构设计,以及对不确定性和多目标优化的扩展研究。; 适合人群:具备电力系统分析基础知识,正在学习或从事电力系统优化、调度、市场等相关领域的研究生、科研人员及工程技术人员。; 使用场景及目标:①理解直流最优潮流(DC-OPF)的理论基础、核心简化假设及其适用范围;②掌握其在电力系统经济调度与市场出清等核心业务场景中的具体应用方法;③了解该领域的最新改进方向和研究前沿,为后续的学术研究或工程实践提供理论支撑和发展指引。; 阅读建议:本文兼具理论深度与应用指导性,建议读者结合经典电力系统分析教材,对照文中关于建模简化与精度代价的分析进行深入思考,重点关注其在现代电力系统中的实际应用场景,并对未来的发展趋势保持关注。
内容概要:本文系统研究了永磁同步电机(PMSM)的速度控制问题,重点探讨了矢量控制(FOC)技术的原理与实现方法,并基于Simulink搭建了完整的仿真模型进行验证。文章深入剖析了矢量控制的核心环节,包括Clarke变换与Park变换在内的坐标变换原理、磁场定向控制策略、双闭环(电流环与速度环)PI控制器的设计,以及空间矢量脉宽调制(SVPWM)技术的应用。通过仿真实验,验证了该控制策略在调节PMSM转速和转矩时具备良好的动态响应性能和稳态精度,为高性能电机驱动系统的研发提供了详实的理论依据和技术参考。; 适合人群:具备电机学、电力电子技术和自动控制理论基础的电气工程、自动化、机电一体化等相关专业的本科生、研究生、科研人员及从事电机驱动开发的工程技术人员。; 使用场景及目标:①深入学习和掌握永磁同步电机矢量控制的理论基础与关键技术;②利用Simulink进行电机控制系统的建模、仿真与算法验证,服务于课程设计、毕业设计或科研项目;③为工业领域中高性能伺服驱动器、新能源汽车电驱系统等产品的开发提供技术方案与仿真支持。; 阅读建议:建议读者结合提供的Simulink仿真模型,动手实践并调整控制器参数(如PI参数),通过对比不同参数下的系统响应曲线,深刻理解各控制环节的作用和系统动态性能的优化方法。

5,943

社区成员

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

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