本指南涵盖了 ReoGrid 中行、列和标题管理的所有内容 — 从基本的插入/删除操作到标题自定义、样式设置、可见性控制和事件。
行数和列数
获取或设置数量
使用属性或方法获取或设置行数和列数:
var sheet = grid.CurrentWorksheet;
// 获取当前数量
int rowCount = sheet.RowCount; // 或 sheet.Rows
int colCount = sheet.ColumnCount; // 或 sheet.Columns
// 设置数量
sheet.RowCount = 500;
sheet.ColumnCount = 50;
// 或使用方法
sheet.SetRows(500);
sheet.SetCols(50);
// 同时调整行数和列数
sheet.Resize(500, 50);
预设值
| 初始值 | 最小值 | 最大值 | 数据类型 | |
|---|---|---|---|---|
| 行数 | 200 | 1 | 1,048,576 | 分页索引二维数组 |
| 列数 | 100 | 1 | 32,768 | 分页索引二维数组 |
| 行高(像素) | 20 | 0 | 65,535 | ushort |
| 列宽(像素) | 70 | 0 | 65,535 | ushort |
您也可以更改默认初始化大小:
// 在创建工作表之前设置默认大小
Worksheet.InitializationRows = 500;
Worksheet.InitializationColumns = 200;

追加 / 插入 / 删除
追加行和列
在网格末尾追加行或列:
sheet.AppendRows(10); // 在底部追加 10 行
sheet.AppendColumns(5); // 在右侧追加 5 列
插入行和列
在指定位置之前插入行或列:
// 在行索引 5 之前插入 3 行
sheet.InsertRows(5, 3);
// 在列索引 2 之前插入 2 列
sheet.InsertColumns(2, 2);
删除行和列
从指定位置开始删除行或列:
// 从行索引 5 开始删除 3 行
sheet.DeleteRows(5, 3);
// 从列索引 2 开始删除 2 列
sheet.DeleteColumns(2, 2);
注意: 在上述所有方法中,第一个参数是从零开始的索引,第二个参数是数量。始终必须保留至少一行和一列。
使用操作(支持撤销/重做)
所有行/列操作都可以通过操作来执行,支持撤销、重做和重复:
// 带撤销支持的行/列插入
sheet.DoAction(new InsertRowsAction(5, 3));
sheet.DoAction(new InsertColumnsAction(2, 2));
// 带撤销支持的行/列删除
sheet.DoAction(new RemoveRowsAction(5, 3));
sheet.DoAction(new RemoveColumnsAction(2, 2));
行高和列宽
设置高度和宽度
为一组行或列设置高度或宽度:
// 将第 0~9 行的高度设置为 30 像素
sheet.SetRowsHeight(0, 10, 30);
// 将第 0~4 列的宽度设置为 120 像素
sheet.SetColumnsWidth(0, 5, 120);
// 将所有行设置为相同高度
sheet.SetRowsHeight(0, sheet.RowCount, 25);
// 将所有列设置为相同宽度
sheet.SetColumnsWidth(0, sheet.ColumnCount, 100);

使用自定义高度/宽度函数
您可以使用函数为每一行或每一列设置不同的高度/宽度:
// 设置不同的高度:第 0 行 = 20px,第 1 行 = 25px,第 2 行 = 30px,...
sheet.SetRowsHeight(0, 10, row => 20 + row * 5);
// 设置不同的宽度
sheet.SetColumnsWidth(0, 5, col => 80 + col * 20);
使用操作(支持撤销/重做)
sheet.DoAction(new SetRowsHeightAction(0, 10, 30));
sheet.DoAction(new SetColumnsWidthAction(0, 5, 120));
注意:
SetRowsHeightAction和SetColumnsWidthAction的构造函数接受起始索引、数量和新的像素大小。这些操作与 ReoGrid 的撤销/重做框架集成。
通过标题实例获取高度和宽度
// 获取特定行的高度
int height = sheet.RowHeaders[2].Height;
// 获取特定列的宽度
int width = sheet.ColumnHeaders[3].Width;
// 获取位置信息
int top = sheet.RowHeaders[2].Top;
int bottom = sheet.RowHeaders[2].Bottom;
int left = sheet.ColumnHeaders[3].Left;
int right = sheet.ColumnHeaders[3].Right;
通过标题实例设置高度和宽度
sheet.RowHeaders[3].Height = 40;
sheet.ColumnHeaders[2].Width = 150;
注意: 性能提示: 当需要更改多个行或列的高度或宽度时,请使用工作表方法(
SetRowsHeight、SetColumnsWidth),而不是逐个设置标题属性。工作表方法会批量执行操作,性能明显更好。推荐写法:
sheet.SetRowsHeight(2, 3, 30); // 从索引 2 开始,3 行,高度 30不推荐写法:
sheet.RowHeaders[2].Height = 30; sheet.RowHeaders[3].Height = 30; sheet.RowHeaders[4].Height = 30;
自动行高
当通过编辑更改单元格值时,ReoGrid 会自动调整行高:

禁用自动行高
为单独的行禁用自动高度调整:
sheet.RowHeaders[2].IsAutoHeight = false;
自动适应行高和列宽
当您双击标题之间的分隔线时,ReoGrid 会将行高或列宽调整为适应最大单元格内容的大小。
调整前:

调整后:

通过代码自动适应
// 自动适应第 0 列(A 列)的宽度
sheet["A2"] = "This is a long text";
sheet.AutoFitColumnWidth(0, false);
// 自动适应第 0~9 行的行高
sheet.AutoFitRowsHeight(0, 10, false);
第二个参数指定是否使用操作(启用后可通过 Undo() 或 Ctrl+Z 撤销)。
自动列宽
为单独的列启用自动宽度:
sheet.ColumnHeaders[0].IsAutoWidth = true;
隐藏和显示行/列
隐藏和显示
// 隐藏行
sheet.HideRows(3, 2); // 从第 3 行开始隐藏 2 行
// 显示(取消隐藏)行
sheet.ShowRows(3, 2);
// 隐藏列
sheet.HideColumns(1, 3); // 从第 1 列开始隐藏 3 列
// 显示(取消隐藏)列
sheet.ShowColumns(1, 3);
隐藏的行或列显示为一条细线:

注意: -
HideRows和HideColumns会自动折叠其行或列被隐藏的大纲。
ShowRows和ShowColumns会自动展开其行或列被显示的大纲。 示例:隐藏由大纲分组的行:
大纲会自动折叠:
更多详情请参见分组和大纲。
通过标题实例隐藏
// 隐藏一行
sheet.RowHeaders[3].IsVisible = false;
// 隐藏一列
sheet.ColumnHeaders[2].IsVisible = false;
检查可见性
// 检查行/列可见性
bool rowVisible = sheet.IsRowVisible(3);
bool colVisible = sheet.IsColumnVisible(2);
// 检查对用户的可见性(同时考虑筛选)
bool rowVisibleToUser = sheet.IsRowVisibleToUser(3);
bool colVisibleToUser = sheet.IsColumnVisibleToUser(2);
// 通过标题实例
bool visible = sheet.RowHeaders[3].IsVisible;
bool visibleToUser = sheet.RowHeaders[3].IsVisibleToUser;
检查单元格可见性
bool hidden = sheet.IsCellVisible(3, 2);
// 通过单元格实例
var cell = sheet.Cells["H8"];
bool cellVisible = cell.IsVisible;
标题实例
从工作表访问单独的标题对象:
var sheet = grid.CurrentWorksheet;
// 通过索引获取标题实例
var rowHeader = sheet.RowHeaders[3];
var colHeader = sheet.ColumnHeaders[2];
// 通过地址获取列标题
var colHeaderA = sheet.ColumnHeaders["A"];
var colHeaderZ = sheet.ColumnHeaders["Z"];
// 工作表方法
var rowHeader2 = sheet.GetRowHeader(3); // 超出范围时返回 null
var colHeader2 = sheet.GetColumnHeader(2); // 超出范围时返回 null
通用标题属性
所有标题(行标题和列标题)共享以下基础属性:
| 属性 | 类型 | 说明 |
|---|---|---|
Index | int | 标题的从零开始的索引(只读) |
IsVisible | bool | 行/列是否可见 |
IsVisibleToUser | bool | 综合考虑 IsVisible 和大小 > 0 的可见性(只读) |
Tag | object | 用户自定义数据存储 |
Body | IHeaderBody | 自定义标题主体,用于自定义渲染 |
DefaultCellBody | Type | 该行/列中所有单元格的默认单元格主体类型 |
行标题属性
| 属性 | 类型 | 说明 |
|---|---|---|
Text | string | 行标题的显示文本 |
TextColor | SolidColor? | 标题文本颜色 |
Height | ushort | 行高(像素) |
Top | int | 顶部位置(像素,只读) |
Bottom | int | 底部位置(像素,只读) |
IsAutoHeight | bool | 是否允许自动高度调整以适应最大单元格 |
IsSelected | bool | 该行是否被选中(只读) |
列标题属性
| 属性 | 类型 | 说明 |
|---|---|---|
Text | string | 列标题的显示文本 |
TextColor | SolidColor? | 标题文本颜色 |
AddressText | string | 列地址(例如 “A”、“B”、“Z”)(只读) |
Width | ushort | 列宽(像素) |
Left | int | 左侧位置(像素,只读) |
Right | int | 右侧位置(像素,只读) |
IsAutoWidth | bool | 是否允许自动宽度调整 |
HeaderCell | HeaderCell | 该列标题的 HeaderCell 实例(只读) |
标题文本自定义
更改列标题文本
sheet.ColumnHeaders[0].Text = "Product";
sheet.ColumnHeaders[1].Text = "Price";
sheet.ColumnHeaders[2].Text = "Quantity";

更改行标题文本
sheet.RowHeaders[0].Text = "Item 1";
sheet.RowHeaders[1].Text = "Item 2";

更改行标题宽度
可以更改行标题区域的宽度以显示更多文本:
sheet.RowHeaderWidth = 100;
sheet.RowHeaders[1].Text = "Row Header";

特殊值:
0— 隐藏行标题区域-1— 恢复为系统默认宽度
更改标题文本颜色
// 设置特定列标题的文本颜色
sheet.ColumnHeaders[0].TextColor = new SolidColor(Color.Red);
// 设置特定行标题的文本颜色
sheet.RowHeaders[0].TextColor = new SolidColor(Color.Blue);
// 移除自定义文本颜色(恢复为默认值)
sheet.ColumnHeaders[0].TextColor = null;
行标题样式
ReoGrid 提供了 RowHeaderStyle 对象,用于全局设置工作表中所有行标题的样式。通过 RowHeaderStyle 属性访问:
var style = sheet.RowHeaderStyle;
RowHeaderStyle 属性
| 属性 | 类型 | 默认值 | 说明 |
|---|---|---|---|
TextColor | SolidColor? | null(系统默认) | 标题文本颜色。设置为 null 可移除。 |
BackColor | SolidColor? | null(系统默认) | 背景颜色。设置为 null 可移除。 |
FontSize | float | 12f (WinForms) | 字体大小 |
Font | string / FontFamily | ”Arial” (WinForms) | 字体名称(WinForms)或 FontFamily(WPF) |
FontStyle | FontStyles / FontStyle | Regular | 字体样式(粗体、斜体等) |
HorizontalAlignment | ReoGridHorAlign | Center | 文本水平对齐方式 |
VerticalAlignment | ReoGridVerAlign | Middle | 文本垂直对齐方式 |
Padding | PaddingValue | (空) | 单元格内边距 |
示例:自定义行标题外观
var style = sheet.RowHeaderStyle;
// 更改字体
style.Font = "Consolas";
style.FontSize = 10;
// 更改颜色
style.TextColor = new SolidColor(Color.DarkBlue);
style.BackColor = new SolidColor(Color.LightGray);
// 更改对齐方式
style.HorizontalAlignment = ReoGridHorAlign.Left;
style.Padding = new PaddingValue(4, 0, 4, 0); // 左、上、右、下
重置行标题样式
sheet.RowHeaderStyle.Reset();
显示 / 隐藏标题区域
使用工作表设置控制标题的可见性:
// 隐藏列标题
sheet.SetSettings(WorksheetSettings.View_ShowColumnHeader, false);
// 隐藏行标题
sheet.SetSettings(WorksheetSettings.View_ShowRowHeader, false);
// 重新显示
sheet.SetSettings(WorksheetSettings.View_ShowColumnHeader, true);
sheet.SetSettings(WorksheetSettings.View_ShowRowHeader, true);
// 检查当前设置
bool showColHeader = sheet.HasSettings(WorksheetSettings.View_ShowColumnHeader);
列默认单元格类型
您可以为整列指定默认的单元格类型。当在该列中创建单元格时,它们会自动使用指定的单元格主体:
// 将 A 列设置为使用 CheckBoxCell
sheet.ColumnHeaders["A"].DefaultCellBody = typeof(unvell.ReoGrid.CellTypes.CheckBoxCell);
// 设置该列的水平对齐方式
sheet.ColumnHeaders["A"].Style.HorizontalAlign = ReoGridHorAlign.Center;
// 给复选框添加少量内边距
sheet.ColumnHeaders["A"].Style.Padding = new System.Windows.Forms.Padding(2);
仅设置单元格类型不会显示任何内容 — 单元格主体只有在设置了单元格数据后才会显示:

sheet["A1:A5"] = new object[] { false, true, false, false, true };
复选框单元格接受 bool 值作为数据:

自定义标题主体
您可以通过实现 IHeaderBody 接口并将其赋值给标题的 Body 属性来创建自定义标题渲染:
// 将自定义标题主体赋值给列标题
sheet.ColumnHeaders[0].Body = new MyCustomHeaderBody();
IHeaderBody 接口允许您为单独的标题定义自定义绘制、鼠标交互和大小调整逻辑。
用户数据(Tag)
将任意用户数据附加到任何标题:
// 存储自定义数据
sheet.RowHeaders[0].Tag = new { Category = "Sales", Priority = 1 };
sheet.ColumnHeaders[0].Tag = "PrimaryKey";
// 稍后检索
var tag = sheet.ColumnHeaders[0].Tag;
事件
行和列结构事件
| 事件 | 事件参数 | 说明 |
|---|---|---|
RowsInserted | RowsInsertedEventArgs | 插入行时触发 |
RowsDeleted | RowsDeletedEventArgs | 删除行时触发 |
ColumnsInserted | ColumnsInsertedEventArgs | 插入列时触发 |
ColumnsDeleted | ColumnsDeletedEventArgs | 删除列时触发 |
RowsHeightChanged | RowsHeightChangedEventArgs | 行高更改时触发 |
ColumnsWidthChanged | ColumnsWidthChangedEventArgs | 列宽更改时触发 |
事件参数属性
RowsInsertedEventArgs / RowsDeletedEventArgs:
Row(int) — 起始行索引Count(int) — 受影响的行数
ColumnsInsertedEventArgs / ColumnsDeletedEventArgs:
Index(int) — 起始列索引Count(int) — 受影响的列数
RowsHeightChangedEventArgs:
Row(int) — 起始行索引Count(int) — 受影响的行数Height(int) — 新的高度值
ColumnsWidthChangedEventArgs:
Index(int) — 起始列索引Count(int) — 受影响的列数Width(int) — 新的宽度值
示例:监听行/列事件
sheet.RowsInserted += (s, e) =>
{
Console.WriteLine($"Inserted {e.Count} rows at row {e.Row}");
};
sheet.ColumnsWidthChanged += (s, e) =>
{
Console.WriteLine($"Width changed for {e.Count} columns starting at {e.Index}, new width: {e.Width}");
};
单独标题事件
行标题和列标题在其自身实例上触发事件:
// 监听特定行的高度更改
sheet.RowHeaders[3].HeightChanged += (s, e) =>
{
Console.WriteLine($"Row 3 height changed to {e.Height}");
};
// 监听特定列的宽度更改
sheet.ColumnHeaders[2].WidthChanged += (s, e) =>
{
Console.WriteLine($"Column 2 width changed to {e.Width}");
};

隐藏由大纲分组的行:
大纲会自动折叠:
