cxGrid从表单元格编辑状态的问题,请教高手。。。

xixuemao 2013-09-16 05:52:32
EditValueChanged事件中处理单元格编辑业务
但在这个事件中判断焦点列的编辑状态时,为false,有谁遇到这种情况吗?
if tvBatch.Controller.FocusedColumn.Editing then
begin
end

注:主表的tv中此事件判断没有问题。
...全文
365 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
xixuemao 2013-09-17
  • 打赏
  • 举报
回复
引用 2 楼 simonhehe 的回复:
[quote=引用 楼主 xixuemao 的回复:] EditValueChanged事件中处理单元格编辑业务 但在这个事件中判断焦点列的编辑状态时,为false,有谁遇到这种情况吗? if tvBatch.Controller.FocusedColumn.Editing then begin end 注:主表的tv中此事件判断没有问题。
cxGrid单元格编辑状态通过 TableView.DataController.isediting判断. 如下, 变量s分别记录数据提交前, 提交后值 procedure TForm1.vw1EditValueChanged( Sender: TcxCustomGridTableView; AItem: TcxCustomGridTableItem); var s : Variant; begin //vw1 : TcxGridBandedTableView; if vw1.DataController.IsEditing then s := vw1.DataController.Values[vw1.Controller.FocusedRowIndex, vw1.Controller.FocusedColumnIndex]; vw1.DataController.Post(); s := vw1.DataController.Values[vw1.Controller.FocusedRowIndex, vw1.Controller.FocusedColumnIndex]; end; 从表应该也是如此(我没测试). 如果不能解决问题给我留言, 我上班后试一下. :) ps: tvBatch.Controller.FocusedColumn.Editing 是判断当前列是否可编辑, 按说在EditValueChanged方法中应该为True才对.[/quote] 谢谢你的解答,是的,我在主表的editvaluechanged事件里,处理完全都ok的,这个值是true,而且取到的焦点行、列index都是正确的。。 但在从表的这个事件里,这个editing是false,然后焦点列的index也正确,但FocusedRowIndex为-1,所以用以上方法取到的value是null。。但当焦点定位到从表某记录时,结果集的数据也确实是正确的,我新建了一个空的工程和2个表测试,结果也是如此。。 我在这个事件里,想做的就是通过tv.Controller.EditingController.Edit.EditingValue,把当前编辑的数值直接取到。 第一次使用这个控件,很多地方还搞不太明白,如果有时间,麻烦新建一个测试一下。谢谢啦
simonhehe 2013-09-17
  • 打赏
  • 举报
回复
如果只是需要做数据刷新, 通过从表外键找到主表记录刷新即可. 如果允许双向更新, 你需要注意别循环调用
xixuemao 2013-09-17
  • 打赏
  • 举报
回复
目前看就是从表的行焦点index不正确,所以在此事件里对主表的数据集进行处理,各种报错。。真的很头疼。。 想实现这个,有其他的事件可以用吗,试了几个都不理想。。或者有更好的办法?
xixuemao 2013-09-17
  • 打赏
  • 举报
回复
引用 6 楼 simonhehe 的回复:
tv2 为从表

对的,在事件里post一下就可以取到了。。非常感谢。。

我想实现,修改主表的数据后,从表跟随变化,这个已经实现了。。
但修改从表的数值后,主表跟随变化,试了一些办法,都会报错,很头疼,请问有什么好的办法吗?
在从表的编辑事件里,取到编辑后的数据,然后调用主表数据集的locate方法报错,或者对主表进行过滤,调用结果集的enablecontrol也报错。。
simonhehe 2013-09-17
  • 打赏
  • 举报
回复
tv2 为从表
simonhehe 2013-09-17
  • 打赏
  • 举报
回复
procedure TForm1.tv2EditValueChanged(Sender: TcxCustomGridTableView;
  AItem: TcxCustomGridTableItem);
var
    s, s1 : Variant;
begin
  //主从表时, 从表有焦点单元格.
//  AItem.FocusedCellViewInfo.RecordViewInfo.Index;   //行
//  AItem.FocusedCellViewInfo.Item.Index;             //列
  s := AItem.FocusedCellViewInfo.Value;               //单元格值
  if AItem.Editing then
    Sender.DataController.Post();
  s1 := AItem.FocusedCellViewInfo.Value;

end;
xixuemao 2013-09-17
  • 打赏
  • 举报
回复
up。。。。。
simonhehe 2013-09-16
  • 打赏
  • 举报
回复
引用 楼主 xixuemao 的回复:
EditValueChanged事件中处理单元格编辑业务 但在这个事件中判断焦点列的编辑状态时,为false,有谁遇到这种情况吗? if tvBatch.Controller.FocusedColumn.Editing then begin end 注:主表的tv中此事件判断没有问题。
cxGrid单元格编辑状态通过 TableView.DataController.isediting判断. 如下, 变量s分别记录数据提交前, 提交后值 procedure TForm1.vw1EditValueChanged( Sender: TcxCustomGridTableView; AItem: TcxCustomGridTableItem); var s : Variant; begin //vw1 : TcxGridBandedTableView; if vw1.DataController.IsEditing then s := vw1.DataController.Values[vw1.Controller.FocusedRowIndex, vw1.Controller.FocusedColumnIndex]; vw1.DataController.Post(); s := vw1.DataController.Values[vw1.Controller.FocusedRowIndex, vw1.Controller.FocusedColumnIndex]; end; 从表应该也是如此(我没测试). 如果不能解决问题给我留言, 我上班后试一下. :) ps: tvBatch.Controller.FocusedColumn.Editing 是判断当前列是否可编辑, 按说在EditValueChanged方法中应该为True才对.
xixuemao 2013-09-16
  • 打赏
  • 举报
回复
补充一下,从表此事件中查看FocusedRowIndex为-1,FocusedColumnIndex的值是对的。 当我选中行的时候,查看数据集的数据,确实是正确的。 从表的keyfieldnames也设置了。。

5,388

社区成员

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

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