GridView的行头号默认没有显示,需要在事件CustomDrawRowIndicator中绘制行头号,行号显示代码如下
void CustomDrawRowIndicator (object sender, RowIndicatorCustomDrawEventArgs e)
if (e.RowHandle >= 0)
e.Info.DisplayText = (e.RowHandle + 1).ToString();
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事件可以这么写:
private void 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的参数即可:
public static void BindCustomDrawRowIndicator(DevExpress.XtraGrid.Views.Grid.GridView view)
view.IndicatorWidth = CalcIndicatorDefaultWidth(view);
view.CustomDrawRowIndicator += (s, e) =>
if (e.RowHandle >= 0)
e.Info.DisplayText = (e.RowHandle + 1).ToString();
view.TopRowChanged += (s, e) =>
int width = CalcIndicatorBestWidth(view);
if ((view.IndicatorWidth - 4 < width || view.IndicatorWidth + 4 > width) && view.IndicatorWidth != width)
view.IndicatorWidth = width;
/// <summary>
/// 计算行头宽度
/// </summary>
/// <param name="sender"></param>
/// <returns></returns>
static 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;
/// <summary>
/// 计算默认的宽度
/// </summary>
/// <param name="view"></param>
/// <returns></returns>
static int CalcIndicatorDefaultWidth(DevExpress.XtraGrid.Views.Grid.GridView view)
var grid = view.GridControl;
Graphics graphics = new Control().CreateGraphics();
SizeF sizeF = new SizeF();
int rowHeight= 22;//22是Row的估计高度
if (view.RowHeight > 0)
rowHeight = view.RowHeight;
int count = grid != null ? grid.Height / rowHeight : 30;
sizeF = graphics.MeasureString(count.ToString(), view.Appearance.Row.Font);
return Convert.ToInt32(sizeF.Width) + 20;
源码下载 (源码多余,土豪请随意)
GridView的行头号默认没有显示,需要在事件CustomDrawRowIndicator中绘制行头号,行号显示代码如下void CustomDrawRowIndicator (object sender, RowIndicatorCustomDrawEventArgs e) { if (e.RowHandle >= 0) ...
关于DevExpress.XtraGrid的复合表头或多行表头的示例,界面如下图所示
1.首先要把DevExpress的GridControl转换为BandedGridView
2.设置显示列及绑定的字段
此处设置与我们平常使用GridControl制件一样
3.进入设计视图(见下图),点击Bands,
3.1 添加多个Band,如图中1处按键添加
3.2 布局:
DevExpress GridView行头显示行号且根据行号宽度动态自适应显示
第一步、首先找到对应的gridview当中CustomDrawRowIndicator事件,双击进去
this.gridView1.CustomDrawRowIndicator += new DevExpress.XtraGrid.Views.Grid.RowIndicatorCustomDrawEventHandler(this.gridView1_CustomDrawRowIndicator);
①将创建的GridControl下的GirdView1转化为BandGridView类型;
②创建需要展示的列(指定列的名称【Name】、描述【caption】、数据字段名称【FieldName】)
③绑定列实现复合表头。
注意:如果复合表头有多行,则需要设置新增Band的Row Count,然后设置【Band properties下的AutoFillDown=false】
详细操作如下:
注意:如果要隐藏表格的设计字段内容,则需.
GridView.IndicatorWidth; //行指示面板的宽度
GridView.RowHeight; //行高
GridView.OptionsView.ShowAutoFilterRow; //是否显示自动过滤行
GridView.OptionsView.ShowGroupPanel...
在使用DevExpress GridControl控件中,如果需要添加新行,可以通过以下步骤实现:
1. 首先,在GridControl控件中选中想要添加新行的数据源,比如DataTable、List等。
2. 然后,在GridControl控件的Designer视图中设置控件的AllowAddNewRow属性为True。
3. 接着,在代码中调用GridView控件的AddNewRow方法,启动添加新行操作。
4. 在GridView控件的InitNewRow事件中,对新行进行初始化,比如设置默认值等。
5. 最后,将新行添加到数据源中,刷新GridView的数据显示。
下面是示例代码:
1. 在GridControl控件的Designer视图中设置AllowAddNewRow属性为True:
![image](https://user-images.githubusercontent.com/8575679/137455672-6dfeefa6-0ed6-4c6b-8d1e-0cfa34dde057.png)
2. 在代码中调用GridView的AddNewRow方法启动添加新行操作:
gridView1.AddNewRow();
3. 在GridView的InitNewRow事件中进行新行的初始化:
private void gridView1_InitNewRow(object sender, DevExpress.XtraGrid.Views.Grid.InitNewRowEventArgs e)
gridView1.SetRowCellValue(e.RowHandle, "ID", 0);
gridView1.SetRowCellValue(e.RowHandle, "Name", "New Row");
这里通过SetRowCellValue方法设置新行的ID和Name属性值。
4. 最后,在代码中将新行添加到数据源中,刷新GridView的数据显示:
dataTable.Rows.Add(gridView1.GetDataRow(gridView1.FocusedRowHandle));
gridView1.RefreshData();
这里通过Add方法将新行添加到DataTable中,然后调用GridView的RefreshData方法刷新数据显示。
以上就是在DevExpress GridControl控件中添加新行的步骤,实现起来相对简单。