DropdownListCell 是一个内置的单元格主体,用于显示单项选择的下拉列表。它扩展了 DropdownCell,继承了下拉面板基础设施。
命名空间
using unvell.ReoGrid.CellTypes;
创建下拉列表单元格
var sheet = grid.CurrentWorksheet;
var dropdown = new DropdownListCell(
"Apple", "Orange", "Banana", "Pear",
"Pumpkin", "Cherry", "Coconut"
);
sheet["B2"] = dropdown;
效果:

构造函数
| 构造函数 | 说明 |
|---|---|
DropdownListCell() | 空的下拉列表 |
DropdownListCell(params string[] candidates) | 使用字符串项创建 |
DropdownListCell(IEnumerable<string> candidates) | 使用集合创建 |
DropdownListCell(CellValueListSource source) | 从单元格值列表源创建 |
DropdownListCell(ReferenceRange refRange) | 使用单元格范围作为数据源创建 |
使用单元格范围作为数据源
可以将下拉列表绑定到单元格范围,使项目自动更新:
// 项目来自单元格 A1:A10
var dropdown = new DropdownListCell(sheet.Ranges["A1:A10"]);
sheet["C1"] = dropdown;
使用可变列表
传入 List<string> 以保持项目同步:
var items = new List<string> { "Alpha", "Beta", "Gamma" };
var dropdown = new DropdownListCell(items);
sheet["B2"] = dropdown;
// 稍后添加项目 — 它们会出现在下拉列表中
items.Add("Delta");
属性
DropdownListCell 属性
| 属性 | 类型 | 说明 |
|---|---|---|
SelectedItem | object | 当前选中的项 |
SelectedIndex | int | 选中项的索引 |
继承自 DropdownCell
| 属性 | 类型 | 默认值 | 说明 |
|---|---|---|---|
PullDownOnClick | bool | false | 点击单元格时打开下拉列表(不仅是按钮) |
DropdownButtonSize | RGSize | 16x16 | 下拉按钮的大小 |
DropdownButtonAutoHeight | bool | true | 自动调整按钮高度以匹配单元格 |
IsDropdown | bool | — | 下拉面板当前是否打开(只读) |
DropdownPanelHeight | int | 200 | 下拉面板的像素高度 |
MinimumDropdownWidth | int | 40 | 下拉面板的最小宽度 |
MaximumDropdownWidth | int | 1200 | 下拉面板的最大宽度 |
DropdownControl | Control | — | 面板中显示的平台控件 |
DropdownButtonStyle | DropdownCellStyle | — | 下拉按钮的视觉样式 |
DropdownCellStyle 属性
| 属性 | 类型 | 说明 |
|---|---|---|
ArrowNormalColor | SolidColor? | 箭头颜色(null 时使用工作表文本颜色) |
ArrowDisableColor | SolidColor? | 禁用时的箭头颜色 |
事件
| 事件 | 说明 |
|---|---|
SelectedItemChanged | 选中项改变时触发 |
DropdownOpened | 下拉面板打开时触发(继承) |
DropdownClosed | 下拉面板关闭时触发(继承) |
dropdown.SelectedItemChanged += (s, e) =>
{
Console.WriteLine("Selected: " + dropdown.SelectedItem);
};
由于下拉列表单元格在选择项目后会更新单元格数据,工作表的 CellDataChanged 事件也会触发:
sheet.CellDataChanged += (s, e) =>
{
if (e.Cell.Position == new CellPosition("B2"))
{
Console.WriteLine("Selected: " + e.Cell.Data);
}
};
方法
| 方法 | 说明 |
|---|---|
PushDown(bool forceCellEdit = true) | 以编程方式打开下拉面板 |
PullUp() | 关闭下拉面板 |
Clone() | 创建此单元格主体的副本 |
// 以编程方式打开下拉列表
dropdown.PushDown();
// 关闭
dropdown.PullUp();
设置默认数据
要设置默认值或更改单元格数据:
sheet["B2"] = "Apple";
效果:

更改下拉单元格大小
更改列宽
sheet.ColumnHeaders["B"].Width = 120;

更改行高
sheet.RowHeaders[1].Height = 40;

合并单元格
sheet.MergeRange("B2:C2");

设置内边距样式
在单元格内缩小下拉控件:
sheet.Cells["B2"].Style.Padding = new Padding(0, 0, 10, 0);

更改下拉按钮大小
dropdown.DropdownButtonAutoHeight = false;
dropdown.DropdownButtonSize = new System.Drawing.Size(40, 15);
当 DropdownButtonAutoHeight 为 true(默认)时,按钮会拉伸以填满单元格高度。设置为 false 可使用固定大小:

设置单元格边框
下拉单元格默认不显示边框。需要显式添加边框:
sheet.Ranges["B2"].BorderOutside = BorderStyle.GraySolid;

点击单元格时打开
默认情况下,下拉列表仅在点击下拉按钮时打开。设置 PullDownOnClick 可在点击单元格任意位置时打开:
dropdown.PullDownOnClick = true;
WPF 样式
在 WPF 上,通过 Style 属性自定义列表外观:
#if WPF
dropdown.Style.TextColor = SolidColor.DarkBlue;
dropdown.Style.BackColor = SolidColor.LightYellow;
dropdown.Style.FontSize = 14;
dropdown.Style.FontWeight = FontWeights.Bold;
dropdown.Style.HorizontalAlignment = HorizontalAlignment.Left;
dropdown.Style.Padding = new PaddingValue(4, 4, 4, 4);
#endif
DropdownListStyle 属性(仅 WPF)
| 属性 | 类型 | 说明 |
|---|---|---|
TextColor | SolidColor | 列表中的文本颜色 |
BackColor | SolidColor | 背景色 |
Font | FontFamily | 字体系列 |
FontWeight | FontWeight | 字体粗细 |
FontSize | double | 字体大小 |
FontStyle | FontStyle | 字体样式(斜体等) |
HorizontalAlignment | HorizontalAlignment | 项目水平对齐 |
VerticalAlignment | VerticalAlignment | 项目垂直对齐 |
Padding | PaddingValue | 项目内边距 |
Reset() | 方法 | 重置为默认样式 |
CopyFrom(style) | 方法 | 从另一个样式复制 |
绘制自定义下拉按钮
覆写 OnPaintDropdownButton 以自定义按钮外观:
class MyDropdownListCell : DropdownListCell
{
public MyDropdownListCell(params string[] items) : base(items) { }
protected override void OnPaintDropdownButton(CellDrawingContext dc, Graphics.Rectangle buttonRect)
{
dc.Graphics.DrawAndFillRectangle(buttonRect, SolidColor.DeepSkyBlue, new SolidColor("#BEE7F1"));
var centerPoint = new Graphics.Point(buttonRect.Left + buttonRect.Width / 2,
buttonRect.Top + buttonRect.Height / 2);
GraphicsToolkit.FillTriangle(dc.Graphics.PlatformGraphics, 9,
centerPoint, GraphicsToolkit.TriangleDirection.Down,
this.IsDropdown ? Pens.SkyBlue : Pens.DarkSlateBlue);
}
}

制作自定义下拉单元格
通过扩展 DropdownCell,创建将任何控件放入面板的自定义下拉单元格:

请参阅 如何创建自定义下拉单元格。
类层次结构
CellBody
└─ DropdownCell (基类 — 面板、按钮、打开/关闭)
└─ DropdownListBaseCell (候选源)
├─ DropdownListCell (仅选择列表)
└─ ComboListCell (可编辑组合框带自动补全)
相关主题
- 内置单元格类型 — 所有单元格类型概览
- 组合列表单元格 — 可编辑组合框变体
- 自定义单元格 — 创建自定义单元格主体
- 如何创建自定义下拉单元格 — 自定义下拉教程