rzt_tao 发表于 2019-6-5 11:31:41

关于DevExpress GridView行头显示行号且根据行号宽度动态自适...

本帖最后由 rzt_tao 于 2019-6-5 11:44 编辑

GridView的行头号默认没有显示,需要在事件CustomDrawRowIndicator中绘制行头号,行号显示代码如下
**** Hidden Message *****
GridView默认的行头宽度较小,往往都需要设置GridView.IndicatorWidth属性来设置宽度,但是这个宽度是固定的,如果列表数据较大,设置小了后面的数据行号就会显示不全,如果设置较大,比如有1w行,那么在浏览前面的数据的时候会觉得显示太宽,不符合设计美观,着实让人别扭,如果可以动态的根据当前的行号大小来决定其行头 的宽度的话,那就perfect了。接下来让我来介绍实现步骤:

GridView提供TopRowChanged事件,当数据滚动的时候,就会触发到这个事件,那么我们就可以利用这个事件在滚动数据的时候来计算此时的显示的最大行号,进而来计算出该最大行号的宽度,计算宽度如下:
/// <summary>
      /// 计算行头宽度
      /// </summary>
      /// <param name="sender"></param>
      /// <returns></returns>
      int CalcIndicatorBestWidth(DevExpress.XtraGrid.Views.Grid.GridView view)
      {
            Graphics graphics = new Control().CreateGraphics();
            SizeF sizeF = new SizeF();
            int count = view.TopRowIndex + ((DevExpress.XtraGrid.Views.Grid.ViewInfo.GridViewInfo)view.GetViewInfo()).RowsInfo.Count;
            if (count == 0)
            {
                count = 30;
            }
            sizeF = graphics.MeasureString(count.ToString(), view.Appearance.Row.Font);
            return Convert.ToInt32(sizeF.Width) + 20;
      }


那么TopRowChanged事件可以这么写:
privatevoid OnTopRowChanged(object sender, EventArgs e)
      {
            GridView view = sender as GridView;
            if (view == null)
                return;
            int width = CalcIndicatorBestWidth(view);
            if ((view.IndicatorWidth - 4 < width || view.IndicatorWidth + 4 > width) && view.IndicatorWidth != width)
            {
                view.IndicatorWidth = width;
            }
      }

为了方便大家复制黏贴,请查看以下代码复制黏贴到你的项目内,在构造函数内调用,传个gridview的参数即可:
**** Hidden Message *****
效果图:


源代码下载 (源码多余,土豪随意)

panyijun 发表于 2019-6-5 11:39:26

很好 正好需要 感谢涛神分享

454737410 发表于 2019-6-5 14:26:22

看看这个是怎么弄的,自己弄的不好

ningjun2019 发表于 2019-6-10 21:46:38

感谢楼主分享经验

我来拾豆豆 发表于 2019-6-12 11:32:30

很好 正好需要 感谢涛神分享

wangchengwu 发表于 2019-6-13 14:29:21

很好 正好需要 感谢涛神分享

softboy99 发表于 2019-6-14 16:24:04

多谢分享!

依然丶飘零 发表于 2019-6-25 11:22:22

学习一下

wj3031 发表于 2019-6-28 14:30:28

真方便,來來來,我ctrl+v一下

yelangpp 发表于 2019-6-29 20:45:06

看起来还不错哦。

caiwdo 发表于 2019-6-30 21:17:20

学习一下

piayping1 发表于 2019-7-16 09:50:12

感谢分享,学习学习

yinghen 发表于 2019-7-16 14:20:28

好像外面已经写完了

lllgggwww 发表于 2019-7-22 17:07:05

十分需要,参考一下

zhzhk2015 发表于 2019-7-26 19:38:12

行头显示行号且根据行号宽度动态自适

xiaoshengDev 发表于 2019-9-30 09:30:42

谢谢分享,正需要

tuzai 发表于 2019-10-27 17:02:45

学习学习!!!!!

xjdb8 发表于 2019-11-4 23:08:44

22222222222222222222222222222222222222222222222222222

76856123 发表于 2019-11-6 13:36:54


      /// 计算行头宽度
   

kekeyu 发表于 2019-11-30 15:32:14

收藏下载...

samzhou 发表于 2019-12-24 22:16:05

66666,行头显示行号且根据行号宽度动态自适.

绿海枫蓝 发表于 2020-2-12 11:20:39

感谢分享,这个很好

quartect 发表于 2020-2-18 10:23:23

xue xi le xue xi le

psober 发表于 2020-2-20 08:50:19

感谢楼主分享经验

54wyh 发表于 2020-2-26 16:51:05

都是代码大神,感谢

je6rry 发表于 2020-3-2 19:14:44

谢谢分享!

rwc 发表于 2020-3-9 14:29:25

这个更改很重要,窗体大小总经常改变

superstarzjh 发表于 2020-3-11 15:15:10

进来学习学习一下

HAI 发表于 2020-3-12 11:20:06

1111111111111111111111111111111

qq1029591077 发表于 2020-3-28 23:46:14

666666666666
页: [1] 2 3
查看完整版本: 关于DevExpress GridView行头显示行号且根据行号宽度动态自适...