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

创建自定义单元格主体

ReoGrid 允许用户使用单元格主体接口创建任何自定义单元格类型。要创建单元格主体,请创建一个继承自 CellTypes.CellBody 类的类。在本示例中,我们将创建一个支持下拉功能的单元格主体,这需要继承 CellTypes.DropDownCell 类。

public class DatePickerCell : DropdownCell
{
  // our class members
}

将此自定义单元格主体添加到工作表后,将显示一个空的下拉单元格。

var worksheet = grid.CurrentWorksheet;
worksheet["B2"] = new DatePickerCell();

结果: 272

接下来,我们将在空的下拉面板中添加一个标准的 .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;
}

结果: 271

这篇文章对您有帮助吗?