ReoGrid 中的单元格可以托管一个单元格主体 — 一个渲染自定义内容并处理用户交互的组件。ReoGrid 提供了许多内置的单元格主体类型,用于常见的 UI 控件。

命名空间

using unvell.ReoGrid.CellTypes;

可用的单元格类型

示例说明
ButtonCell361通用按钮
CheckBoxCell363复选框(切换 true/false
RadioButtonCell365单选按钮(同组内互斥)
HyperlinkCell362带可选自动导航的超链接
DropdownListCell367用于单项选择的下拉列表
ComboListCell带文本输入和下拉选择的组合框
ProgressCell368进度条(值 0–1)
NegativeProgressCell370正/负进度条
ImageCell369显示图片
ImageButtonCell389按钮上的图片
DatePickerCell381带日历下拉的日期选择器
ColumnDropdownListCell使用列数据作为来源的下拉列表

设置单元格主体

// 通过工作表索引器
sheet[1, 2] = new ButtonCell("Click Me");

// 通过单元格实例
var cell = sheet.Cells["C3"];
cell.Body = new CheckBoxCell();

ICellBody 接口

所有单元格主体都实现 ICellBodyCellBody 基类提供默认实现:

成员说明
OnSetup(Cell cell)当主体附加到单元格时调用
OnPaint(CellDrawingContext dc)渲染单元格主体
OnMouseDown/Up/Move/Enter/Leave鼠标交互处理程序(返回 true 以消费事件)
OnMouseWheel(e)鼠标滚轮处理程序
OnKeyDown/Up(KeyCode)键盘处理程序(返回 true 以消费)
OnStartEdit()当单元格进入编辑模式时调用(返回 false 以阻止)
OnEndEdit(data, reason)编辑结束时调用(返回修改后的数据或原始数据)
OnSetData(data)设置单元格数据时调用(返回修改后的数据或原始数据)
OnGotFocus() / OnLostFocus()焦点变化处理程序
AutoCaptureMouse()是否捕获鼠标事件(默认:true
DisableWhenCellReadonly单元格只读时是否禁用主体(默认:true
Cell父单元格(只读,在 OnSetup 后可用)
Clone()创建单元格主体的副本

有关创建自定义单元格主体,请参阅 自定义单元格


ButtonCell

可点击按钮,将单元格数据显示为标签。

ButtonCell

// 带默认文本
sheet[1, 2] = new ButtonCell("Hello");

// 不带文本 — 使用单元格数据作为标签
sheet[1, 2] = new ButtonCell();
sheet[1, 2] = "Hello";

属性

属性类型说明
IsPressedbool按钮是否当前被按下

事件

事件说明
Click用户点击按钮时触发

方法

方法说明
PerformClick()以编程方式模拟按钮点击
var button = new ButtonCell("Hello");
button.Click += (s, e) => MessageBox.Show("Button clicked");
sheet["C3"] = button;

// 编程方式点击
button.PerformClick();

自定义按钮外观

通过单元格样式更改按钮标签颜色:

var cell = sheet.Cells["C3"];
cell.Style.TextColor = Color.Blue;
cell.Body = new ButtonCell("Hello");

358


CheckBoxCell

复选框,将单元格数据在 truefalse 之间切换。

p03

var checkbox = new CheckBoxCell();
sheet["C1"] = new object[] { checkbox, "Auto destroy after 5 minutes." };

构造函数

构造函数说明
CheckBoxCell()创建未选中的复选框
CheckBoxCell(bool initChecked)创建具有初始选中状态的复选框

属性

属性类型说明
IsCheckedbool获取或设置选中状态

获取和设置选中状态

// 通过单元格数据设置
sheet[1, 2] = true;   // 选中
sheet[1, 2] = false;  // 取消选中

// 通过单元格数据获取
bool isChecked = (sheet["C1"] as bool?) ?? false;

// 通过复选框实例获取/设置
checkbox.IsChecked = true;
bool state = checkbox.IsChecked;

事件

事件说明
Click用户点击复选框时触发(空格键不触发)
CheckChanged选中状态改变时触发(通过鼠标或键盘)
checkbox.Click += (s, e) => { /* 处理点击 */ };

checkbox.CheckChanged += (s, e) =>
{
    Console.WriteLine($"Checked: {checkbox.IsChecked}");
};

由于复选框会更新单元格数据,CellDataChanged 也会触发:

sheet.CellDataChanged += (s, e) =>
{
    if (e.Cell.Position == new CellPosition("C1"))
        Console.WriteLine("Checkbox changed: " + e.Cell.Data);
};

自定义绘制

覆写 OnContentPaint 以自定义复选框外观:

class MyCheckBox : CheckBoxCell
{
    Image checkedImage, uncheckedImage;

    public MyCheckBox()
    {
        checkedImage = Image.FromFile(@"...");
        uncheckedImage = Image.FromFile(@"...");
    }

    protected override void OnContentPaint(CellDrawingContext dc)
    {
        dc.Graphics.DrawImage(
            this.IsChecked ? checkedImage : uncheckedImage,
            this.ContentBounds);
    }
}

360


RadioButtonCell

单选按钮,继承自 CheckBoxCell。同组内的单选按钮互相切换。

p04

var radio = new RadioButtonCell();
sheet["C3"] = radio;

RadioButtonGroup

分配共享的 RadioButtonGroup,使同一时间只能选中一个单选按钮:

var group = new RadioButtonGroup();

sheet[10, 2] = new object[,] {
    { new RadioButtonCell() { RadioGroup = group }, "Apple" },
    { new RadioButtonCell() { RadioGroup = group }, "Orange" },
    { new RadioButtonCell() { RadioGroup = group }, "Banana" },
};

RadioButtonGroup 成员

成员类型说明
RadioButtonsList<RadioButtonCell>此组中的所有单选按钮
AddRadioButton(cell)方法手动将单选按钮添加到组中
Contains(cell)方法检查单选按钮是否属于此组

属性

属性类型说明
RadioGroupRadioButtonGroup此单选按钮所属的组
IsCheckedbool获取或设置选择状态(继承)

事件

// Click 事件
radio.Click += (s, e) => { /* 处理 */ };

// 组中所有单选按钮的 CheckChanged 事件
group.RadioButtons.ForEach(rb =>
    rb.CheckChanged += (s, e) =>
        Console.WriteLine("Selected: " + sheet[rb.Cell.Row, rb.Cell.Column + 1]));

下拉列表,允许用户从项目列表中选择。

206

构造函数

构造函数说明
DropdownListCell()空的下拉列表
DropdownListCell(params string[] candidates)带字符串项的下拉列表
DropdownListCell(IEnumerable<string> candidates)带字符串集合的下拉列表
DropdownListCell(ReferenceRange refRange)使用单元格范围作为数据源的下拉列表
var dropdown = new DropdownListCell(
    "Apple", "Orange", "Banana", "Pear",
    "Pumpkin", "Cherry", "Coconut"
);
sheet["B2"] = dropdown;

属性

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

事件

事件说明
SelectedItemChanged选中项改变时触发
dropdown.SelectedItemChanged += (s, e) =>
{
    Console.WriteLine("Selected: " + dropdown.SelectedItem);
};

选中项也会设置为单元格数据,因此 CellDataChanged 也会触发。

了解更多请参阅 下拉列表单元格


ComboListCell

组合框,将文本输入框与下拉选择列表结合。支持输入时自动补全。

构造函数

构造函数说明
ComboListCell()空的组合列表
ComboListCell(params string[] candidates)带字符串项
ComboListCell(IEnumerable<string> candidates)带字符串集合
ComboListCell(ReferenceRange refRange)使用单元格范围作为数据源
var combo = new ComboListCell("Apple", "Orange", "Banana");
sheet["B2"] = combo;

属性

属性类型说明
SelectedItemobject当前选中的项
SelectedIndexint选中项的索引
EnableAutoCompletionbool输入时启用自动补全(默认:true
AutoCompleteCompareratorFunc<string, string, bool>自动补全的自定义比较函数
CandidationListSearchProviderFunc<object, IList<string>>候选列表的自定义搜索提供程序

事件

事件说明
SelectedItemChanged选中项改变时触发

DropdownCell 是所有下拉单元格类型的抽象基类。可以扩展它来创建自定义下拉控件。

166

属性

属性类型默认值说明
PullDownOnClickboolfalse点击单元格时打开下拉面板
DropdownButtonSizeRGSize16x16下拉按钮的大小
DropdownButtonAutoHeightbooltrue自动调整按钮高度以匹配单元格
IsDropdownboolfalse下拉面板当前是否打开
DropdownPanelHeightint200下拉面板的高度
MinimumDropdownWidthint40下拉面板的最小宽度
MaximumDropdownWidthint1200下拉面板的最大宽度
DropdownControlControlnull在下拉面板中显示的控件
DropdownButtonStyleDropdownCellStyle下拉按钮的样式

方法

方法说明
PushDown(bool forceCellEdit = true)打开下拉面板
PullUp()关闭下拉面板

事件

事件说明
DropdownOpened下拉面板打开时触发
DropdownClosed下拉面板关闭时触发

请参阅 如何创建自定义下拉单元格 了解创建自定义下拉控件。


ProgressCell

显示水平进度条。单元格值(0–1)决定填充量。

sheet["B2"] = new ProgressCell();
sheet["B2"] = 0.7;  // 70% 进度

属性

属性类型默认值说明
TopColorSolidColorLightSkyBlue进度条的顶部渐变色
BottomColorSolidColorSkyBlue进度条的底部渐变色
var progress = new ProgressCell
{
    TopColor = SolidColor.LightGreen,
    BottomColor = SolidColor.Green,
};
sheet["B2"] = progress;
sheet["B2"] = 0.5;

NegativeProgressCell

显示正值和负值的进度条。正值从中心向右延伸;负值从中心向左延伸。

370

sheet["B2"] = new NegativeProgressCell();
sheet["B2"] = -0.3;  // 30% 负向进度

属性

属性类型默认值说明
PositiveColorSolidColorLightGreen正值颜色
NegativeColorSolidColorLightCoral负值颜色
LinearGradientbooltrue应用渐变阴影
DisplayCellTextbooltrue显示单元格文本值
LimitedInsideCellbooltrue限制进度条在单元格边界内

HyperlinkCell

可点击的超链接。使用单元格数据作为显示文本和导航 URL。

p02

// 点击时自动导航到 URL
sheet[1, 2] = new HyperlinkCell("http://www.google.com", true);

// 或分别设置 URL 和显示文本
sheet[1, 2] = new HyperlinkCell("http://www.google.com", false);
sheet[1, 2] = "Google";

构造函数

构造函数说明
HyperlinkCell()启用自动导航的超链接
HyperlinkCell(string url)带 URL 和自动导航的超链接
HyperlinkCell(string url, bool autoNavigate)可配置自动导航的超链接

属性

属性类型默认值说明
LinkURLstringnull导航 URL
AutoNavigatebooltrue点击时自动导航
LinkColorSolidColorBlue未访问链接的颜色
VisitedColorSolidColorPurple已访问链接的颜色
ActivateColorSolidColorRed链接被按下时的颜色

事件

事件说明
Click链接被点击时触发(如果 AutoNavigate 为 true 则在导航之后)
var link = new HyperlinkCell("http://myurl.com", false);
link.Click += (s, e) => { /* 自定义处理 */ };
sheet["A1"] = link;

方法

方法说明
PerformClick()以编程方式模拟点击

ImageCell

在单元格中显示图片。

p07

var image = Image.FromFile("photo.jpg");
sheet[2, 6] = new ImageCell(image);

构造函数

构造函数说明
ImageCell()空的图片单元格
ImageCell(Image image)带指定图片的图片单元格
ImageCell(Image image, ImageCellViewMode viewMode)带视图模式的图片单元格

属性

属性类型说明
ImageImage要显示的图片
ViewModeImageCellViewMode图片的显示方式

ImageCellViewMode 枚举

说明
Stretch填充到单元格边界(默认)— 可能会变形
Zoom按比例缩放以适应单元格边界
Clip保持原始大小并裁剪到单元格边界
var imgCell = new ImageCell(img, ImageCellViewMode.Zoom);
sheet["F6"] = imgCell;

通过单元格对齐样式控制图片位置:

var cell = sheet.Cells["F6"];
cell.Style.HAlign = ReoGridHorAlign.Center;
cell.Style.VAlign = ReoGridVerAlign.Middle;

ImageButtonCell

显示图片的按钮。继承自 ButtonCell

390

sheet["C3"] = new ImageButtonCell(Image.FromFile("Save-32.png"));

属性

属性类型说明
ImageImage按钮上显示的图片

继承 ButtonCellClick 事件和 PerformClick() 方法。


DatePickerCell

带月历的下拉单元格,用于日期选择。仅 WinForms。

271

sheet["B2"] = new DatePickerCell();

选择的日期存储为单元格的数据。

注意: DatePickerCell 仅在 WinForms 版本中可用。对于 WPF,请参阅 如何创建日期选择器单元格


ColumnDropdownListCell

使用列数据作为选择来源的下拉列表。仅 WinForms。

sheet["B2"] = new ColumnDropdownListCell();

单元格主体大小

单元格主体的大小由其父单元格决定,包括任何内边距样式。要使单元格主体更大,可以合并多个单元格:

sheet.MergeRange("B2:D4");
sheet["B2"] = new ButtonCell("Large Button");

平台可用性

单元格类型WinFormsWPF
ButtonCell
CheckBoxCell
RadioButtonCell
HyperlinkCell
ImageCell
ImageButtonCell
ProgressCell
NegativeProgressCell
DropdownCell
DropdownListCell
ComboListCell
ColumnDropdownListCell
DatePickerCell
自定义单元格主体

演示项目

内置单元格类型的示例包含在 Demo 项目中。

WinForms:

62

WPF:

352

相关主题

这篇文章对您有帮助吗?