要创建下拉列表单元格,可以使用 DropdownListCell 类,这是一个内置的单元格类型,用于在指定单元格中显示下拉列表。
var sheet1 = grid.CurrentWorksheet;
var dropdown = ReoGrid.CellTypes.DropdownListCell(
"Apple", "Orange", "Banana", "Pear", "Pumpkin", "Cherry", "Coconut"
);
sheet1["B2"] = dropdown;
效果: 
使用 Items 属性可以添加、删除和清空列表项:
dropdown.Items.AddRange("Apple", "Orange", "Banana", "Pear", "Pumpkin", "Cherry", "Coconut");
要设置默认数据或更改单元格数据,可以直接设置单元格的数据:
sheet1["B2"] = "Apple";
效果: 
可以通过以下两种方式获取用户选择项的事件:
DropdownListCell 实例的 SelectedItemChanged 事件Worksheet 实例的 CellDataChanged 事件使用 SelectedItemChanged 事件的代码:
dropdown.SelectedItemChanged = function(sender,event){
/* 处理选中项变更 */
};
由于下拉列表单元格会在用户选择后更新单元格数据,也可以使用 CellDataChanged 事件来获取选中数据:
sheet1.CellDataChanged = function(sender,event){
if(event.Cell.Position == "E5"){
winform.msgbox("下拉列表选中项: " + event.Cell.Data);
}
};
有多种方法可以更改下拉单元格的宽度,根据工作表布局选择以下方法之一:
Padding 样式使用 SetColumnsWidth 和 SetRowsHeight 方法设置表头大小也会改变单元格大小:
sheet1.ColumnHeaders["B"].Width = 120;
效果: 
更改行高:
sheet1.RowHeaders[1].Height = 40;
效果: 
通过合并相邻单元格来增大尺寸:
sheet1.MergeRange("B2:C2");
效果: 
为单元格设置内边距样式可以缩小下拉控件在单元格内的显示区域:
// 设置右侧内边距 10 像素,ReoGrid.PaddingValue 参数依次为(上,下,左,右)
header.Style.Padding = ReoGrid.PaddingValue(0,0,0,10/*right*/);
效果: 
以下两个属性与更改按钮大小相关:
DropdownButtonAutoHeightDropdownButtonSizeDropdownButtonAutoHeight 属性表示自动调整下拉按钮高度以适应单元格,默认值为 true;DropdownButtonSize 属性用于直接设置下拉按钮大小。当 DropdownButtonAutoHeight 为 true 时,按钮高度设置将不起作用。
自动高度为 true 时: 
自动高度为 false 时: 
当 DropdownButtonAutoHeight 为 false 时,可以修改 DropdownButtonSize 属性来调整按钮大小:
dropdown.DropdownButtonAutoHeight = false;
dropdown.DropdownButtonSize = grid.Size(40, 15);
效果: 
下拉单元格本身不显示边框,需要通过设置单元格边框样式来显示:
sheet1.Ranges["B2"].BorderOutside = ReoGrid.Graphics.SolidColor.Gray;
效果: 
下面演示在 aardio 中调用 C# 代码编译一个继承自 ReoGrid.CellTypes.DropdownListCell 的 .NET 类,
并重写 OnPaintDropdownButton 方法绘制自定义下拉按钮:
import win.ui;
/*DSG{{*/
var winform = win.form(text="ReoGrid - 自定义单元格")
/*}}*/
import dotNet.ReoGrid;
var grid = ReoGrid.ReoGridControl(winform);
var sheet1 = grid.CurrentWorksheet;
import dotNet.ReoGrid.Compiler;
var compiler = dotNet.ReoGrid.Compiler();
//C# 源代码
compiler.Source = /***
using System;
using unvell.ReoGrid;
using unvell.ReoGrid.CellTypes;
using unvell.ReoGrid.Events;
using unvell.ReoGrid.Rendering;
using unvell.ReoGrid.Graphics;
using unvell.ReoGrid.Interaction;
using unvell.Common;
namespace aardio.ReoGrid {
public class MyDropdownListCell : DropdownListCell {
public MyDropdownListCell(params string[] items) : base(items) { }
protected override void OnPaintDropdownButton(CellDrawingContext dc,Rectangle buttonRect) {
dc.Graphics.DrawAndFillRectangle(buttonRect,
SolidColor.DeepSkyBlue,
new SolidColor("#BEE7F1"));
var centerPoint = new Point(
buttonRect.Left + buttonRect.Width / 2,
buttonRect.Top + buttonRect.Height / 2);
//绘制下拉按钮
var triangleSize = 5;
var points = new Point[] {
new Point(centerPoint.X - triangleSize, centerPoint.Y - triangleSize / 2),
new Point(centerPoint.X + triangleSize, centerPoint.Y - triangleSize / 2),
new Point(centerPoint.X, centerPoint.Y + triangleSize / 2)
};
dc.Graphics.FillPolygon(new SolidColor(this.IsDropdown ? "#0078D7" : "#666666"), points);
}
}
}
***/
//编译 C# 代码并生成程序集
compiler.CompileOrFail("/MyCheckBox.dll");
//加载程序集
var dll = dotNet.loadFile("/MyCheckBox.dll");
//在 aardio 中创建 .NET 对象
var MyDropdownListCell = dll.import("aardio.ReoGrid.MyDropdownListCell");
//加载到单元格
sheet1["C1"] = MyDropdownListCell( ["Item1", "Item2"] );
winform.show();
win.loopMessage();
效果: 
请参考:自定义单元格
可以创建自定义下拉单元格,将任何 Windows 窗体控件放入下拉面板中。

参考如何创建自定义下拉单元格。