CxGrid分组互斥展开

CxGrid分组互斥展开

原创文章,引用请保留出处。

       做一个工具,对要CxGrid分组内容进行浏览查询。其中需要分组互斥展开功能,为的是避免组中记录太多影响使用体验。本想这样简单功能在CxGrid中有现成的方法,可是我在D7和D2010对应版本的Dev控件中没有找到(也可能高版本的Dev有吧)。那只有在万能的网上找了。花费了两个多小时,找到的方法要不不能满足要求,要不就是不能实现。没有办法那只好自己写代码了!为实现此功能尝试了三种方法具体思路是:㈠、获取当前记录号,然后取消分组并使当前记录保持焦点,最后重建分组。此方法可行,但代码实现有点难度,使用体验不好,放弃。㈡、保存当前记录指针,并逐级获取父记录指针并保存,关闭所有分组。最后按父级由高向低逐级展开,最后展开当前记录。此方法没有成功,是因为保存的记录指针是以ViewData为基准的,在当分组改变后记录指针也发生改变。㈢、以当前组索引号为分界,向上、向下关闭所有打开的分组,这样只展开了当前选定的分组。下面的代码就是此方法的具体实现。

效率分析,如果三种方法都可行,那第二种方法效率最高,代码实现也简单,可是.....没有可是了,.留给其它人吧。

代码不长,功能也单一,如果高版本的Dev没有类似功能可以将其集成到Dev中,方便使用。

Procedure TForm1.GDBTV1GroupRowExpanded(Sender: TcxGridTableView;
            AGroup: TcxGridGroupRow);
Var I , VRC: Integer;
    AcI , ALe : Integer    ;
Begin
    AcI := AGroup.Index        ;    // 取当前组索引号
       ALe := AGroup.Level        ;    // 当前组级别
    AGroup.Focused := True    ;    // 当前组获取焦点
    VRC := GDBTV1.ViewData.RowCount    ;    // 可视分组成员数
        With GDBTV1.ViewData Do Begin
    For I := Pred(VRC) DownTo Succ(AcI) Do
        If(Records[I].Expanded) Then
            Records[I].Collapse( True );
    For I := Pred(AcI) DownTo 0 Do Begin
        If( ALe <= Records[I].Level ) Then
            If(Records[I].Expanded) Then
                Records[I].Collapse( True );
        If( ALe > Records[I].Level ) Then
            ALe := Records[I].Level        ;
    End ;
        End ;
End ;

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值