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