cxGrid实现取消过滤和排序后定位到首行(单选和多选)

DataContoller中的函数FocusedRecordIndex没有反应,FocusedRowIndex正常。

cxgrdtvGrid1DBTableView1.DataController.FocusedRecordIndex := 0; //定位到第一行,排序过滤无反应

cxgrdtvGrid1DBTableView1.DataController.FocusedRowIndex := 0; //定位到第一行,排序过滤仍正常

排序对应事件:cxGridDBTableView中的DataController的OnSortingChanged

过滤对应事件:cxGridDBTableView中的DataController的Filter的OnChanged


对于“排序”后定位到首行只需要设置dcofocusTopRowAfterSorting为True


1、测试cxGrid的cxGridDBBandTableView组件在排序或者过滤以后:(单选:MultSelect属性设置为False)

排序:devexpress1226版本的dcofocusTopRowAfterSorting设置为True即可焦点自动定位到首行,单选状态下有选中行焦点和颜色标示

过滤:默认设置,取消过滤后仍默认过滤时候选中的行,增加cxGridDBTableView中的DataController的Filter的OnChanged如下代码行,会出现取消过滤后选中首行(焦点和选中行颜色同时定位到第一行)

var
  Filter: TcxDataFilterCriteria; //定义过滤器对象
begin
  with Sender as TcxDataFilterCriteria do 
    if IsEmpty then  //操作过滤器触发过滤器事件时判断过滤器是否为空,即:是否取消过滤
      begin
        cxgrdtvGrid1DBTableView1.DataController.FocusedRowIndex := 0; //焦点定位到第一行
      end;

2、针对多选情况变通调整,否则焦点(虚线框可以看见)可以移动,但是选中行颜色标志(背景颜色)不会;(多选:MultSelect属性设置为True

排序:devexpress1226版本的dcofocusTopRowAfterSorting设置为True即可焦点自动定位到首行,多选状态下只有焦点标示无选中行颜色标示

过滤:默认设置,取消过滤后仍默认过滤时候选中的行,增加cxGridDBTableView中的DataController的Filter的OnChanged如下代码行,会出现取消过滤后无论过滤时候选择的一行还是多选都会在此时只选中首行(焦点和选中行颜色同时定位到第一行)

var
  Filter: TcxDataFilterCriteria;
begin
  with Sender as TcxDataFilterCriteria do
    if IsEmpty then  //操作过滤器触发过滤器事件时判断过滤器是否为空,即:是否取消过滤

      begin
        cxgrdtvGrid1DBTableView1.OptionsSelection.MultiSelect := False;
        cxgrdtvGrid1DBTableView1.DataController.FocusedRowIndex := 0; //焦点定位到第一行
        cxgrdtvGrid1DBTableView1.OptionsSelection.MultiSelect := True;
      end;


3、cxGrid1DBTableView的OptionsView属性中的FocusRect为False就可以看不见虚线框,即获得焦点行的边框


4、在多选的情况下,按照以上所说的排序和过滤会出现,排序后焦点定位到第一行但是默认没有选中(背景色为白色),而取消过滤后焦点定位到第一行而且默认第一行选中(背景色为蓝色或者其他操作系统主题颜色),这样就不一致了,临时解决方案:

都只定位到第一行并且都不选择任何行,只需要对过滤后的事件代码做一个刷新调整即可:

var
  Filter: TcxDataFilterCriteria;
begin
  with Sender as TcxDataFilterCriteria do
    if IsEmpty then
      begin
       cxgrdtvGrid1DBTableView1.DataController.DataSet.Active := False;
       cxgrdtvGrid1DBTableView1.DataController.DataSet.Active := True;
      end;


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值