本帖最后由 rzt_tao 于 2019-6-5 11:44 编辑
GridView的行头号默认没有显示,需要在事件CustomDrawRowIndicator中绘制行头号,行号显示代码如下
GridView默认的行头宽度较小,往往都需要设置GridView.IndicatorWidth属性来设置宽度,但是这个宽度是固定的,如果列表数据较大,设置小了后面的数据行号就会显示不全,如果设置较大,比如有1w行,那么在浏览前面的数据的时候会觉得显示太宽,不符合设计美观,着实让人别扭,如果可以动态的根据当前的行号大小来决定其行头 的宽度的话,那就perfect了。接下来让我来介绍实现步骤:
GridView提供TopRowChanged事件,当数据滚动的时候,就会触发到这个事件,那么我们就可以利用这个事件在滚动数据的时候来计算此时的显示的最大行号,进而来计算出该最大行号的宽度,计算宽度如下:
[C#] 纯文本查看 复制代码 void CustomDrawRowIndicator (object sender, RowIndicatorCustomDrawEventArgs e)
{
if (e.RowHandle >= 0)
{
e.Info.DisplayText = (e.RowHandle + 1).ToString();
}
}
那么TopRowChanged事件可以这么写:
[C#] 纯文本查看 复制代码 /// <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;
}
为了方便大家复制黏贴,请查看以下代码复制黏贴到你的项目内,在构造函数内调用,传个gridview的参数即可:
效果图:
源代码下载 (源码多余,土豪随意)
|