DropdownListCell 是一个内置的单元格主体,用于显示单项选择的下拉列表。它扩展了 DropdownCell,继承了下拉面板基础设施。

命名空间

using unvell.ReoGrid.CellTypes;

创建下拉列表单元格

var sheet = grid.CurrentWorksheet;

var dropdown = new DropdownListCell(
    "Apple", "Orange", "Banana", "Pear",
    "Pumpkin", "Cherry", "Coconut"
);

sheet["B2"] = dropdown;

效果: 196

构造函数

构造函数说明
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");

属性

属性类型说明
SelectedItemobject当前选中的项
SelectedIndexint选中项的索引

继承自 DropdownCell

属性类型默认值说明
PullDownOnClickboolfalse点击单元格时打开下拉列表(不仅是按钮)
DropdownButtonSizeRGSize16x16下拉按钮的大小
DropdownButtonAutoHeightbooltrue自动调整按钮高度以匹配单元格
IsDropdownbool下拉面板当前是否打开(只读)
DropdownPanelHeightint200下拉面板的像素高度
MinimumDropdownWidthint40下拉面板的最小宽度
MaximumDropdownWidthint1200下拉面板的最大宽度
DropdownControlControl面板中显示的平台控件
DropdownButtonStyleDropdownCellStyle下拉按钮的视觉样式
属性类型说明
ArrowNormalColorSolidColor?箭头颜色(null 时使用工作表文本颜色)
ArrowDisableColorSolidColor?禁用时的箭头颜色

事件

事件说明
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";

效果: 197

更改下拉单元格大小

更改列宽

sheet.ColumnHeaders["B"].Width = 120;

198

更改行高

sheet.RowHeaders[1].Height = 40;

199-2

合并单元格

sheet.MergeRange("B2:C2");

200

设置内边距样式

在单元格内缩小下拉控件:

sheet.Cells["B2"].Style.Padding = new Padding(0, 0, 10, 0);

201

更改下拉按钮大小

dropdown.DropdownButtonAutoHeight = false;
dropdown.DropdownButtonSize = new System.Drawing.Size(40, 15);

DropdownButtonAutoHeighttrue(默认)时,按钮会拉伸以填满单元格高度。设置为 false 可使用固定大小:

202

设置单元格边框

下拉单元格默认不显示边框。需要显式添加边框:

sheet.Ranges["B2"].BorderOutside = BorderStyle.GraySolid;

205

点击单元格时打开

默认情况下,下拉列表仅在点击下拉按钮时打开。设置 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
属性类型说明
TextColorSolidColor列表中的文本颜色
BackColorSolidColor背景色
FontFontFamily字体系列
FontWeightFontWeight字体粗细
FontSizedouble字体大小
FontStyleFontStyle字体样式(斜体等)
HorizontalAlignmentHorizontalAlignment项目水平对齐
VerticalAlignmentVerticalAlignment项目垂直对齐
PaddingPaddingValue项目内边距
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);
    }
}

203

制作自定义下拉单元格

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

166

请参阅 如何创建自定义下拉单元格

类层次结构

CellBody
  └─ DropdownCell (基类 — 面板、按钮、打开/关闭)
       └─ DropdownListBaseCell (候选源)
            ├─ DropdownListCell (仅选择列表)
            └─ ComboListCell (可编辑组合框带自动补全)

相关主题

这篇文章对您有帮助吗?