本指南涵盖了 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);

预设值

初始值最小值最大值数据类型
行数20011,048,576分页索引二维数组
列数100132,768分页索引二维数组
行高(像素)20065,535ushort
列宽(像素)70065,535ushort

您也可以更改默认初始化大小:

// 在创建工作表之前设置默认大小
Worksheet.InitializationRows = 500;
Worksheet.InitializationColumns = 200;

23

追加 / 插入 / 删除

追加行和列

在网格末尾追加行或列:

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);

38

使用自定义高度/宽度函数

您可以使用函数为每一行或每一列设置不同的高度/宽度:

// 设置不同的高度:第 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));

注意: SetRowsHeightActionSetColumnsWidthAction 的构造函数接受起始索引、数量和新的像素大小。这些操作与 ReoGrid 的撤销/重做框架集成。 39

通过标题实例获取高度和宽度

// 获取特定行的高度
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;

注意: 性能提示: 当需要更改多个行或列的高度或宽度时,请使用工作表方法(SetRowsHeightSetColumnsWidth),而不是逐个设置标题属性。工作表方法会批量执行操作,性能明显更好。

推荐写法:

sheet.SetRowsHeight(2, 3, 30);  // 从索引 2 开始,3 行,高度 30

不推荐写法:

sheet.RowHeaders[2].Height = 30;
sheet.RowHeaders[3].Height = 30;
sheet.RowHeaders[4].Height = 30;

自动行高

当通过编辑更改单元格值时,ReoGrid 会自动调整行高: 22

禁用自动行高

为单独的行禁用自动高度调整:

sheet.RowHeaders[2].IsAutoHeight = false;

自动适应行高和列宽

当您双击标题之间的分隔线时,ReoGrid 会将行高或列宽调整为适应最大单元格内容的大小。

调整前: 218

调整后: 219

通过代码自动适应

// 自动适应第 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);

隐藏的行或列显示为一条细线: 96

注意: - HideRowsHideColumns 会自动折叠其行或列被隐藏的大纲。

  • ShowRowsShowColumns 会自动展开其行或列被显示的大纲。 示例: 58 隐藏由大纲分组的行: 59 大纲会自动折叠: 60

更多详情请参见分组和大纲

通过标题实例隐藏

// 隐藏一行
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

通用标题属性

所有标题(行标题和列标题)共享以下基础属性:

属性类型说明
Indexint标题的从零开始的索引(只读)
IsVisiblebool行/列是否可见
IsVisibleToUserbool综合考虑 IsVisible 和大小 > 0 的可见性(只读)
Tagobject用户自定义数据存储
BodyIHeaderBody自定义标题主体,用于自定义渲染
DefaultCellBodyType该行/列中所有单元格的默认单元格主体类型

行标题属性

属性类型说明
Textstring行标题的显示文本
TextColorSolidColor?标题文本颜色
Heightushort行高(像素)
Topint顶部位置(像素,只读)
Bottomint底部位置(像素,只读)
IsAutoHeightbool是否允许自动高度调整以适应最大单元格
IsSelectedbool该行是否被选中(只读)

列标题属性

属性类型说明
Textstring列标题的显示文本
TextColorSolidColor?标题文本颜色
AddressTextstring列地址(例如 “A”、“B”、“Z”)(只读)
Widthushort列宽(像素)
Leftint左侧位置(像素,只读)
Rightint右侧位置(像素,只读)
IsAutoWidthbool是否允许自动宽度调整
HeaderCellHeaderCell该列标题的 HeaderCell 实例(只读)

标题文本自定义

更改列标题文本

sheet.ColumnHeaders[0].Text = "Product";
sheet.ColumnHeaders[1].Text = "Price";
sheet.ColumnHeaders[2].Text = "Quantity";

Custom Header

更改行标题文本

sheet.RowHeaders[0].Text = "Item 1";
sheet.RowHeaders[1].Text = "Item 2";

117

更改行标题宽度

可以更改行标题区域的宽度以显示更多文本:

sheet.RowHeaderWidth = 100;
sheet.RowHeaders[1].Text = "Row Header";

116

特殊值:

  • 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 属性

属性类型默认值说明
TextColorSolidColor?null(系统默认)标题文本颜色。设置为 null 可移除。
BackColorSolidColor?null(系统默认)背景颜色。设置为 null 可移除。
FontSizefloat12f (WinForms)字体大小
Fontstring / FontFamily”Arial” (WinForms)字体名称(WinForms)或 FontFamily(WPF)
FontStyleFontStyles / FontStyleRegular字体样式(粗体、斜体等)
HorizontalAlignmentReoGridHorAlignCenter文本水平对齐方式
VerticalAlignmentReoGridVerAlignMiddle文本垂直对齐方式
PaddingPaddingValue(空)单元格内边距

示例:自定义行标题外观

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);

仅设置单元格类型不会显示任何内容 — 单元格主体只有在设置了单元格数据后才会显示: 110

sheet["A1:A5"] = new object[] { false, true, false, false, true };

复选框单元格接受 bool 值作为数据: 111

自定义标题主体

您可以通过实现 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;

事件

行和列结构事件

事件事件参数说明
RowsInsertedRowsInsertedEventArgs插入行时触发
RowsDeletedRowsDeletedEventArgs删除行时触发
ColumnsInsertedColumnsInsertedEventArgs插入列时触发
ColumnsDeletedColumnsDeletedEventArgs删除列时触发
RowsHeightChangedRowsHeightChangedEventArgs行高更改时触发
ColumnsWidthChangedColumnsWidthChangedEventArgs列宽更改时触发

事件参数属性

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}");
};

相关主题

这篇文章对您有帮助吗?