关于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 *****
效果图:
源代码下载 (源码多余,土豪随意)
很好 正好需要 感谢涛神分享 看看这个是怎么弄的,自己弄的不好 感谢楼主分享经验 很好 正好需要 感谢涛神分享 很好 正好需要 感谢涛神分享 多谢分享! 学习一下 真方便,來來來,我ctrl+v一下 看起来还不错哦。 学习一下 感谢分享,学习学习 好像外面已经写完了 十分需要,参考一下 行头显示行号且根据行号宽度动态自适 谢谢分享,正需要 学习学习!!!!!
22222222222222222222222222222222222222222222222222222
/// 计算行头宽度
收藏下载... 66666,行头显示行号且根据行号宽度动态自适. 感谢分享,这个很好 xue xi le xue xi le 感谢楼主分享经验 都是代码大神,感谢 谢谢分享! 这个更改很重要,窗体大小总经常改变 进来学习学习一下 1111111111111111111111111111111 666666666666