# dotNet.ReoGrid 扩展库 - ReoGrid 控件最佳实践

本文介绍一种典型方法：通过 ReoGridEditor 创建模板表格，并在使用 ReoGrid 控件的 .NET 应用程序中展示。

## [使用 Excel 文件作为模板](#using-excel-file-as-template)

除了使用 ReoGridEditor，也可以使用 Microsoft Excel 制作模板表格，Excel 文件同样可以被 ReoGrid 显示。详情请参阅 [Excel 文件格式](../io/excel-file-format/.html)。

## [使用 ReoGridEditor 制作模板表格](#make-template-spreadsheet-by-reogrideditor)

当需要在 .NET 应用程序中使用 ReoGrid 显示表格时，推荐按照以下步骤操作：

![步骤示意图](../images/1001.png)

1. 使用 ReoGrid Editor 设计表格模板
2. 保存为 XML 格式
3. 添加为项目资源
4. 在 .NET 应用程序中加载
5. 填充数据

## [1. 使用 ReoGrid Editor 设计模板](#_1-design-a-template-by-using-reogrid-editor)

下载发布包并运行 `ReoGridEditor.exe`：
![编辑器界面](../images/70.png)

使用此编辑器可以设计表格模板，包括文本模板、设置[边框](../cell/border.html)和[单元格样式](../cell.html)，以及单元格[公式](../formula/formula-functions.html)、[合并单元格](../worksheet/merge-and-unmerge.html)和[打印设置](../general/paging-and-print.html)。通常用于为 ReoGrid 应用程序构建模板表格。

以下是完成后的模板示例：
![模板示例](../images/71.png)

## [2. 保存为 XML 格式](#_2-save-as-xml)

选择菜单"文件"→"保存"或点击工具栏上的"保存"按钮，将表格保存为 ReoGrid XML 格式：
![保存界面](../images/72.png)

输入文件名：
![文件名输入](../images/73.png)

## [3. 添加资源文件](#_3-make-as-project-resource)

1. 打开 aardio ，创建新工程或打开现有工程 
2. 在工程的资源目录下 ReoGrid 添加模板文件。

    aardio 工程中的任意目录如果其工程属性里『内嵌资源』为 `true` 就是资源目录，  
    默认情况下工程里的 ｀/res/｀ 目录是一个内嵌资源目录。　  
    我们可以将模板文件添加到 ｀/res/template.rg｀ （必须添加到工程目录而不仅仅是放在硬盘目录内）。  
    aardio 中大多数读取文件内容的函数都直接支持资源文件路径。  
    例如用 aardio 代码 `string.loadBuffer("/res/template.rg")` 或 `string.load("/res/template.rg")` 都可以读取资源文件。

## [4. 加载模板文件](#_4-loading-template-file)

创建新的 Windows 窗体，在窗体程序中创建 ReGrid 控件实例，然后添加以下 aardio 代码：

```aardio
// 使用 ReGrid 自资源文件加载模板文件
grid.Load("/res/template.rg", 1); // 1 表示 ReoGridFormat 格式
```

aardio 新版 dotNet.ReoGrid 扩展库里 `grid.Load`方法 已经直接支持资源文件路径。

`grid.Load`方法从资源二进制数据中读取模板表格的所有数据。运行应用程序后，窗体显示如下：

![加载效果](../images/77.png)

## [5. 填充数据](#_5-fill-data)

继续在`Form_Load`事件中添加代码来填充数据：

```aardio
// 获取第一个工作表实例
var sheet1 = grid.CurrentWorksheet;

// 填充记录
sheet1["B6"] = {
    { "ReoGrid", "sample", "#103, Mars", "02/05/2014", "No" },
    { "User 1", "a@b.c", "-", "01/01/2014", "Yes" },
    { "Guest", "no-email", "Unknown", "01/01/2014", "Yes" }
};

// 填充创建时间
sheet1["E2"] = "创建时间: " ++ time.now("%m/%d/%Y");
```

运行程序：
![填充效果](../images/79.png)

## [预设单元格格式](#presetting-cells-format)

可以在模板文件中指定单元格数据格式。

1. 打开编辑器，右键点击目标单元格或区域，选择"格式单元格..."：
![格式菜单](../images/80.png)
2. 选择"格式"标签，选择"DateTime"，选择"7/13/1980 12:00 AM"模式：
![日期格式](../images/81.png)
3. 点击"确定"
4. 保存模板
5. 更新项目中的嵌入资源
6. 运行程序

格式化后的单元格显示如下：
![格式效果](../images/82.png)

## [定义命名区域](#define-named-range)

一个好方法是给区域定义一个名称。命名区域有助于定位要填充数据的位置。

1. 在编辑器中选择一个区域：
![选择区域](../images/1011.png)
2. 保持选中区域，选择菜单"公式"→"定义命名区域..."：
![定义菜单](../images/1031.png)
3. 输入'mydata'作为名称，然后点击"确定"：
![命名对话框](../images/1041.png)
4. 名称将显示在编辑器左上角的地址字段中：
![名称显示](../images/1051.png)
5. 保存此模板，并刷新项目中的资源模板
6. 修改代码使用命名区域来填充数据：

```aardio
// 使用命名区域填充数据
sheet1["mydata"] = {
    { "ReoGrid", "sample", "#103, Mars", "02/05/2014", "No" },
    { "User 1", "a@b.c", "-", "01/01/2014", "Yes" },
    { "Guest", "no-email", "Unknown", "01/01/2014", "Yes" }
};
```

表格将显示如下：
![命名区域效果](../images/1061.png)

### aardio 使用说明

1. 在 aardio 中加载模板时，可以直接使用文件路径而无需 MemoryStream
2. 表格数据可以直接使用 aardio 表对象（数组）赋值
3. 时间格式化使用 aardio 的 time.now 函数，格式字符串与 .NET 略有不同
4. 命名区域的使用方式与 C# 版本完全一致
5. 所有操作都支持链式调用，可以更简洁地编写代码