本文介绍如何创建自定义日期选择器单元格——一种允许用户从下拉日历组件中选择日期值的单元格。

创建自定义单元格主体
ReoGrid 允许用户使用单元格主体接口创建任何自定义单元格类型。要创建单元格主体,请创建一个继承自 CellTypes.CellBody 类的类。在本示例中,我们将创建一个支持下拉功能的单元格主体,这需要继承 CellTypes.DropDownCell 类。
public class DatePickerCell : DropdownCell
{
// our class members
}
将此自定义单元格主体添加到工作表后,将显示一个空的下拉单元格。
var worksheet = grid.CurrentWorksheet;
worksheet["B2"] = new DatePickerCell();
结果:

接下来,我们将在空的下拉面板中添加一个标准的 .NET 日期选择器控件。
public class DatePickerCell : DropdownCell
{
private DateTimePicker picker = null;
public DatePickerCell()
{
// create a standard .NET date picker
picker = new DateTimePicker();
// handle its event
picker.ValueChanged += Picker_ValueChanged;
**// add date picker to drop-down cell panel**
**base.DropdownControl = picker;**
base.MinimumDropdownWidth = 220;
base.DropdownPanelHeight = 24;
}
...
}
我们需要处理标准 .NET 日期选择器的事件来接收最终用户选择的值。
private void Picker_ValueChanged(object sender, EventArgs e)
{
if (this.Cell != null) this.Cell.Data = picker.Value;
}
此外,当单元格主体首次被分配给单元格时,OnSetup 方法将被调用。在这里,我们为该单元格设置一些样式。
public override void OnSetup(ReoGridCell cell)
{
// call default OnSetup behavior
base.OnSetup(cell);
// give cell a small indent, since the space on the right side is already taken by the drop-down button
cell.Style.Indent = 3;
// Important! Set the cell date format to display dates correctly
cell.DataFormat = DataFormat.CellDataFormatFlag.DateTime;
}
结果:
