# dotNet.ReoGrid 扩展库 - 创建日期选择单元格

本文介绍如何在 aardio 中通过 dotNet.ReoGrid 创建自定义的日期选择器单元格。日期选择器允许用户从下拉日历组件中选择日期值。![271](../images/271.png)

## 创建自定义单元格

ReoGrid 允许用户通过单元格体接口创建任何自定义单元格类型。要创建单元格体，需要创建一个继承自 `CellTypes.CellBody` 的类。在本例中，我们将创建一个支持下拉功能的单元格体，它需要继承自 `CellTypes.DropDownCell` 类。

```aardio
// 在 aardio 中我们直接使用 ReoGrid 提供的 CellTypes 创建控件
var datePickerCell = ReoGrid.CellTypes.DropdownCell();
```

通过将这个自定义单元格体添加到工作表中，我们可以在工作表上看到一个空的下拉单元格。

```aardio
var sheet1 = grid.CurrentWorksheet;
sheet1["B2"] = datePickerCell;
```

效果: ![272](../images/272.png)

接下来，我们将添加一个标准的 .NET 日期选择器控件到这个空的下拉面板中。

```aardio
// 导入 .NET 的 DateTimePicker 控件
import System.Windows.Forms;
var picker = System.Windows.Forms.DateTimePicker();

// 设置下拉控件的属性
datePickerCell.DropdownControl = picker;
datePickerCell.MinimumDropdownWidth = 220;
datePickerCell.DropdownPanelHeight = 24;

// 处理值改变事件
picker.ValueChanged = function(sender,event){
    if(datePickerCell.Cell) datePickerCell.Cell.Data = picker.Value;
}
```

我们需要处理标准 .NET 日期选择器的事件，以接收用户选择的值。

当单元格体首次设置到单元格时，可以设置一些样式：

```aardio
// 设置单元格样式
datePickerCell.OnSetup = function(cell){
    // 调用基类方法
    ..base.OnSetup(cell);
    
    // 给单元格添加缩进，因为右侧空间已被下拉按钮占用
    cell.Style.Indent = 3;
    
    // 重要！设置单元格日期格式以正确显示日期
    cell.DataFormat = ReoGrid.DataFormat.CellDataFormatFlag.DateTime;
}
```

最终效果: ![271](../images/271.png)

> 在 aardio 中，我们不需要像 C# 那样创建继承类，而是直接使用 ReoGrid 提供的 CellTypes 创建控件，并通过设置属性和事件处理函数来实现相同的功能。这种方式更加简洁直观，符合 aardio 的动态语言特性。