EditValueChanged事件中处理单元格编辑业务
但在这个事件中判断焦点列的编辑状态时,为false,有谁遇到这种情况吗?
  if tvBatch.Controller.FocusedColumn.Editing then
  begin
  end注:主表的tv中此事件判断没有问题。cxgrid

解决方案 »

  1.   

    补充一下,从表此事件中查看FocusedRowIndex为-1,FocusedColumnIndex的值是对的。
    当我选中行的时候,查看数据集的数据,确实是正确的。
    从表的keyfieldnames也设置了。。
      

  2.   

    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才对.
      

  3.   

    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才对.谢谢你的解答,是的,我在主表的editvaluechanged事件里,处理完全都ok的,这个值是true,而且取到的焦点行、列index都是正确的。。
    但在从表的这个事件里,这个editing是false,然后焦点列的index也正确,但FocusedRowIndex为-1,所以用以上方法取到的value是null。。但当焦点定位到从表某记录时,结果集的数据也确实是正确的,我新建了一个空的工程和2个表测试,结果也是如此。。
    我在这个事件里,想做的就是通过tv.Controller.EditingController.Edit.EditingValue,把当前编辑的数值直接取到。
    第一次使用这个控件,很多地方还搞不太明白,如果有时间,麻烦新建一个测试一下。谢谢啦
      

  4.   

    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;
      

  5.   

    对的,在事件里post一下就可以取到了。。非常感谢。。我想实现,修改主表的数据后,从表跟随变化,这个已经实现了。。
    但修改从表的数值后,主表跟随变化,试了一些办法,都会报错,很头疼,请问有什么好的办法吗?
    在从表的编辑事件里,取到编辑后的数据,然后调用主表数据集的locate方法报错,或者对主表进行过滤,调用结果集的enablecontrol也报错。。
      

  6.   

    目前看就是从表的行焦点index不正确,所以在此事件里对主表的数据集进行处理,各种报错。。真的很头疼。。
    想实现这个,有其他的事件可以用吗,试了几个都不理想。。或者有更好的办法?