# dotNet.ReoGrid 扩展库 - 行与列操作

[追加/插入/删除操作](#追加插入删除操作)
-----------------------------------------------------------------

工作表提供了管理行和列的方法，包括追加、插入和删除：

```aardio
var sheet1 = grid.CurrentWorksheet;
// 在末尾追加行或列
sheet1.AppendRows(rowCount);
sheet1.AppendCols(colCount);
// 在指定位置插入行或列
sheet1.InsertRows(rowIndex, rowCount);
sheet1.InsertCols(colIndex, colCount);
// 从指定位置开始删除行或列
sheet1.DeleteRows(rowIndex, rowCount);
sheet1.DeleteCols(colIndex, colCount);
```

在这些方法中，第一个参数指定操作开始的从零开始的索引，第二个参数表示要影响的行数或列数。

此外，还可以使用动作来插入或删除行和列，这些动作支持撤销、重做和重复操作：

```aardio
// 插入行或列
var insertRowAction = ReoGrid.Actions.InsertRowsAction(rowIndex, rowCount);
var insertColAction = ReoGrid.Actions.InsertColumnsAction(colIndex, colCount);
// 删除行或列
var removeRowAction = ReoGrid.Actions.RemoveRowsAction(rowIndex, rowCount);
var removeColAction = ReoGrid.Actions.RemoveColumnsAction(colIndex, colCount);
// 执行动作
grid.DoAction(insertRowAction);
grid.DoAction(insertColAction);
grid.DoAction(removeRowAction);
grid.DoAction(removeColAction);
```

设置行数和列数
---------------------------------------------------------------

要修改工作表中的行数和列数，可以使用以下方法：

```aardio
// 调整行数和列数
sheet1.Resize(rowCount, colCount);
// 单独调整行数或列数
sheet1.SetRows(6);  // 设置行数
sheet1.SetCols(5);  // 设置列数
```

![23](../images/23.png)

预定义值
---------------------------------------

下表列出了工作表各种参数的初始值、最小值和最大值，以及它们的数据类型：

|  | 初始值 | 最小值 | 最大值 | 数据类型 |
| --- | --- | --- | --- | --- |
| 行数 | 200 | 1 | 1,048,576 | 分页索引的二维数组 |
| 列数 | 100 | 1 | 32,768 | 分页索引的二维数组 |
| 行高（像素） | 20 | 0 | 65,535 | `ushort` |
| 列宽（像素） | 70 | 0 | 65,535 | `ushort` |

调整高度和宽度
---------------------------------------------------------

要修改行高或列宽，可以使用以下方法：

```aardio
// 设置所有行的高度
sheet1.SetRowsHeight(0, grid.RowCount, 10);
// 设置所有列的宽度
sheet1.SetColsWidth(0, grid.ColCount, 10);
```

![38](../images/38.png)

或者，可以使用以下动作来调整表头大小，并支持撤销这些更改：

```aardio
// 更改行的范围高度
grid.DoAction(ReoGrid.Actions.SetRowsHeightAction(0, 10, 30));
// 更改列的范围宽度
grid.DoAction(ReoGrid.Actions.SetColumnsWidthAction(0, 10, 30));
```

`SetRowsHeightAction` 和 `SetColumnsWidthAction` 构造函数需要分别指定起始索引、要影响的行数或列数以及新的高度或宽度（以像素为单位）。这些动作是 ReoGrid 撤销/重做框架的一部分，允许更灵活的文档编辑。

![39](../images/39.png)

自动行高
-----------------------------------

当通过编辑单元格更改值时，ReoGrid 会自动调整行高：  
![22](../images/22.png)

### 禁用自动调整

可以为每行更改此行为：

```aardio
var rowHeader = sheet1.RowHeaders[2];
rowHeader.IsAutoHeight = false;
```

自动适应行高和列宽
-----------------------------------------------------------------------------

当双击表头的分隔线时，ReoGrid 会调整行高和列宽以适应最大的单元格。

调整前：  
![218](../images/218.png)

调整后：  
![219](../images/219.png)

执行此操作的代码：

```aardio
sheet1["A2"] = "这是一个长文本";
sheet1.AutoFitColumnWidth(0, false);
```

第二个参数指示是否使用动作来执行此操作。使用动作可以通过撤销方法或按 Ctrl+Z 来撤销操作。

隐藏与显示
-----------------------------

与 Excel 类似，ReoGrid 也支持隐藏行或列，调用以下方法来隐藏/显示行或列：

```aardio
sheet1.HideRows(start, count);
sheet1.ShowRows(start, count);
sheet1.HideColumns(start, count);
sheet1.ShowColumns(start, count);
```

隐藏的行或列将显示为单一线条。  
![96](../images/96.png)

注意：

*   `HideRows` 和 `HideColumns` 会自动折叠大纲，如果任何行属于大纲的一部分已被隐藏。
*   `ShowRows` 和 `ShowColumns` 会自动展开大纲，如果任何行属于大纲的一部分已被显示。

示例：  
![58](../images/58.png)  
隐藏由大纲分组的行：  
![59](../images/59.png)  
大纲将自动折叠。  
![60](../images/60.png)

更多细节请参考 [分组与大纲](../worksheet/group-and-outline/.html)。

### 检查隐藏的表头和单元格

检查行或列是否隐藏：

```aardio
var isRowHidden = sheet1.IsHiddenRow(row);
var isColHidden = sheet1.IsHiddenColumn(col);
```

检查单元格是否位于隐藏的行或列上：

```aardio
var isCellHidden = sheet1.IsHiddenCell(row, col);
isCellHidden = sheet1.IsHiddenCell("H8");
var cell = sheet1.Cells["H8"];
isCellHidden = cell.IsHidden;
```

获取表头实例
-----------------------------------------------------------

```aardio
// 从表格控件获取工作表实例
var sheet1 = grid.CurrentWorksheet;
// 获取表头实例
var colHeader = sheet1.ColumnHeaders[2];
var rowHeader = sheet1.RowHeaders[3];
```

### 更改列标题文本

```aardio
// 设置列标题文本
colHeader.Text = "产品";
```

![自定义表头](../images/97.png)

### 更改行标题文本

```aardio
sheet1.RowHeaders[1].Text = "表头";
```

![117](../images/117.png)

### 更改行标题宽度

如果需要显示更多文本，可以更改行标题的宽度：

```aardio
sheet1.RowHeaderWidth = 100;
sheet1.RowHeaders[1].Text = "行标题";
```

![116](../images/116.png)

### 通过表头实例隐藏行

```aardio
// 隐藏第4行（从零开始）
rowHeader.IsHidden = true;
```

![98](../images/98.png)

### 更改表头的宽度或高度

```aardio
sheet1.RowHeaders[3].HeightInPixel = 30;   // 高度（像素）
```

#### 实例调用与控制API的性能差异

某些操作可以通过表头实例调用或控制API调用执行，但表头实例调用会带来性能问题。对于下面的示例，强烈建议使用方法2。

**方法1**：调用表头实例更改行高

```aardio
sheet1.RowHeaders[2].HeightInPixel = 30;
sheet1.RowHeaders[3].HeightInPixel = 30;
sheet1.RowHeaders[4].HeightInPixel = 30;
```

**方法2**：调用控制API更改行高

```aardio
sheet1.SetRowsHeight(2, 3, 30);  // 从索引2开始，共3行
```

方法2比方法1有显著的性能优势。

列单元格类型
---------------------------------------

可以为整列指定默认的单元格类型。

```aardio
// ColumnHeaders属性返回列标题实例
// 它接受数字索引或字符串地址代码来定位列
sheet1.ColumnHeaders["A"].DefaultCellBody = ReoGrid.CellTypes.CheckBoxCell;
// 将此列上所有单元格的水平对齐方式设置为居中
sheet1.ColumnHeaders["A"].Style.HorizontalAlign = ReoGridHorAlign.Center;
// 为复选框设置小内边距（2像素）, ReoGrid.PaddingValue 参数依次为（上,下,左,右），四边都一样可指定一个参数
sheet1.ColumnHeaders["A"].Style.Padding = ReoGrid.PaddingValue(2)
```

仅设置单元格类型不会显示任何单元格，只有在填充单元格数据时才会显示单元格体。  
![110](../images/110.png)

```aardio
sheet1["A1:A5"] = { false, true, false, false, true };
```

复选框单元格可以接受布尔值数据，表格显示如下：  
![111](../images/111.png)