本页提供 ReoGrid 中所有可用事件的全面参考,按类别组织。
工作簿事件
可在 ReoGrid 控件(工作簿)实例上使用:
| 事件 | 事件参数 | 描述 |
|---|
WorksheetCreated | WorksheetCreatedEventArgs | 新工作表已创建 |
WorksheetInserted | WorksheetInsertedEventArgs | 工作表已插入(提供 Index) |
WorksheetRemoved | WorksheetRemovedEventArgs | 工作表已移除(提供 Index) |
BeforeWorksheetNameChange | WorksheetNameChangingEventArgs | 工作表名称变更前(提供 NewName,可取消) |
WorksheetNameChanged | WorksheetNameChangingEventArgs | 工作表名称已变更 |
WorksheetNameBackColorChanged | WorksheetEventArgs | 标签背景色已变更 |
WorksheetNameTextColorChanged | WorksheetEventArgs | 标签文本颜色已变更 |
SettingsChanged | EventArgs | 任何工作簿设置已变更 |
ExceptionHappened | ExceptionHappenEventArgs | 发生内部异常(提供 Exception、Worksheet、CellPosition) |
操作事件
| 事件 | 事件参数 | 描述 |
|---|
BeforeActionPerform | BeforeActionPerformEventArgs | 任何操作执行前(可通过 IsCancelled 取消) |
ActionPerformed | WorkbookActionEventArgs | 操作执行后(提供 Action) |
Undid | WorkbookActionEventArgs | 撤销操作后 |
Redid | WorkbookActionEventArgs | 重做操作后 |
文件 I/O 事件
| 事件 | 事件参数 | 描述 |
|---|
WorkbookLoaded | EventArgs | 工作簿文件加载后 |
WorkbookSaved | EventArgs | 工作簿文件保存后 |
工作表事件
可在单个工作表实例上使用。通过 grid.CurrentWorksheet 或 grid.Worksheets[index] 访问。
单元格数据事件
| 事件 | 事件参数 | 描述 |
|---|
CellDataChanged | CellEventArgs | 单元格数据已变更(提供 Cell) |
RangeDataChanged | RangeEventArgs | 范围中的数据已更新(提供 Range) |
单元格编辑事件
| 事件 | 事件参数 | 描述 |
|---|
BeforeCellEdit | CellBeforeEditEventArgs | 单元格进入编辑模式前(可取消,提供 EditText) |
AfterCellEdit | CellAfterEditEventArgs | 编辑完成后(提供 NewData、EndReason、DataFormat) |
CellEditTextChanging | CellEditTextChangingEventArgs | 编辑期间文本正在变更(提供 Text) |
CellEditCharInputed | CellEditCharInputEventArgs | 字符已输入(提供 InputChar、CaretPositionInLine、LineIndex、InputText) |
CellValidation | CellValidationEventArgs | 对编辑文本进行验证后(提供 Failures、IsValid) |
单元格鼠标事件
| 事件 | 事件参数 | 描述 |
|---|
CellMouseEnter | CellMouseEventArgs | 鼠标进入单元格 |
CellMouseLeave | CellMouseEventArgs | 鼠标离开单元格 |
CellMouseMove | CellMouseEventArgs | 鼠标在单元格内移动 |
CellMouseDown | CellMouseEventArgs | 鼠标按钮在单元格上按下 |
CellMouseUp | CellMouseEventArgs | 鼠标按钮在单元格上释放 |
CellMouseEventArgs 属性:
| 属性 | 类型 | 描述 |
|---|
Cell | Cell | 涉及的单元格 |
CellPosition | CellPosition | 单元格位置 |
IsCancelled | bool | 设置为 true 以取消 |
Buttons | MouseButtons | 哪个鼠标按钮 |
RelativePosition | Point | 相对于单元格的位置 |
AbsolutePosition | Point | 控件上的绝对位置 |
Clicks | int | 点击次数 |
Delta | int | 鼠标滚轮增量 |
Capture | bool | 是否捕获鼠标 |
CursorStyle | CursorStyle | 要显示的光标样式 |
键盘事件
| 事件 | 事件参数 | 描述 |
|---|
BeforeCellKeyDown | BeforeCellKeyDownEventArgs | 按键按下(在原生行为之前,可取消) |
AfterCellKeyDown | AfterCellKeyDownEventArgs | 按键按下(在原生行为之后) |
CellKeyUp | CellKeyDownEventArgs | 按键释放 |
CellKeyDownEventArgs 属性:
| 属性 | 类型 | 描述 |
|---|
Cell | Cell | 焦点单元格 |
CellPosition | CellPosition | 单元格位置 |
KeyCode | KeyCode | 按下的键 |
BeforeCellKeyDownEventArgs 额外包含 IsCancelled (bool)。
选区事件
| 事件 | 事件参数 | 描述 |
|---|
BeforeSelectionRangeChange | BeforeSelectionChangeEventArgs | 选区变更前(可取消,可修改) |
SelectionRangeChanging | RangeEventArgs | 选区变更中(拖动时) |
SelectionRangeChanged | SelectionRangeChangedEventArgs | 选区确定后 |
SelectionModeChanged | EventArgs | 选区模式已变更 |
SelectionStyleChanged | EventArgs | 选区样式已变更 |
SelectionForwardDirectionChanged | EventArgs | 选区前进方向已变更 |
SelectionMovedForward | SelectionMovedForwardEventArgs | 选区向前移动(可取消) |
SelectionMovedBackward | SelectionMovedBackwardEventArgs | 选区向后移动(可取消) |
FocusPosChanged | EventArgs | 焦点单元格位置已变更 |
FocusPosStyleChanged | EventArgs | 焦点位置样式已变更 |
HoverPosChanged | EventArgs | 鼠标悬停单元格已变更 |
详细用法参见选区。
行和列事件
| 事件 | 事件参数 | 描述 |
|---|
RowsInserted | RowsInsertedEventArgs | 行已插入(提供 Row、Count) |
RowsDeleted | RowsDeletedEventArgs | 行已删除(提供 Row、Count) |
ColumnsInserted | ColumnsInsertedEventArgs | 列已插入(提供 Index、Count) |
ColumnsDeleted | ColumnsDeletedEventArgs | 列已删除(提供 Index、Count) |
RowsHeightChanged | RowsHeightChangedEventArgs | 行高已变更(提供 Row、Count、Height) |
ColumnsWidthChanged | ColumnsWidthChangedEventArgs | 列宽已变更(提供 Index、Count、Width) |
RowFiltered | | 行上已应用筛选 |
RowSorted | | 行已排序 |
详细信息参见行、列与标题。
范围事件
| 事件 | 事件参数 | 描述 |
|---|
RangeMerged | RangeEventArgs | 范围已合并 |
RangeUnmerged | RangeEventArgs | 范围已取消合并 |
RangeStyleChanged | RangeEventArgs | 范围上已设置样式 |
范围移动/复制事件
| 事件 | 事件参数 | 描述 |
|---|
BeforeRangeCopy | | 选中范围复制前 |
AfterRangeCopy | | 范围复制操作后 |
BeforeRangeMove | | 选中范围移动前 |
AfterRangeMove | | 范围移动操作后 |
边框事件
| 事件 | 事件参数 | 描述 |
|---|
BorderAdded | BorderAddedEventArgs | 边框已设置(提供 Pos、Style) |
BorderRemoved | BorderRemovedEventArgs | 边框已移除(提供 Pos) |
大纲事件
| 事件 | 事件参数 | 描述 |
|---|
OutlineAdded | OutlineAddedEventArgs | 大纲已添加 |
OutlineRemoved | OutlineRemovedEventArgs | 大纲已移除 |
BeforeOutlineCollapse | BeforeOutlineCollapseEventArgs | 折叠前(可取消) |
AfterOutlineCollapse | AfterOutlineCollapseEventArgs | 折叠后 |
BeforeOutlineExpand | BeforeOutlineExpandingEventArgs | 展开前(可取消) |
AfterOutlineExpand | AfterOutlineExpandingEventArgs | 展开后 |
详细用法参见分组与大纲。
冻结事件
| 事件 | 类型 | 描述 |
|---|
CellsFrozen | EventHandler | 工作表已冻结 |
CellsUnfrozen | EventHandler | 工作表已取消冻结 |
详细信息参见冻结窗格。
剪贴板事件
| 事件 | 事件参数 | 描述 |
|---|
BeforeCopy | | 复制操作前 |
AfterCopy | | 范围已复制到剪贴板后 |
BeforePaste | | 粘贴操作前 |
AfterPaste | | 范围已从剪贴板粘贴后 |
BeforeCut | | 剪切操作前 |
AfterCut | | 范围已剪切后 |
OnPasteError | | 粘贴期间发生错误 |
条件样式事件
| 事件 | 类型 | 描述 |
|---|
ConditionalStyleCellChanged | EventHandler | 条件样式单元格已更新 |
详细信息参见条件样式。
缩放事件
| 事件 | 事件参数 | 描述 |
|---|
Scaled | EventArgs | 缩放级别已变更 |
其他事件
| 事件 | 事件参数 | 描述 |
|---|
NameChanged | EventArgs | 工作表名称已变更 |
Resetted | EventArgs | 工作表已重置 |
SettingsChanged | SettingsChangedEventArgs | 工作表设置已变更 |
常见事件模式
可取消事件
许多”Before”事件都有 IsCancelled 属性。将其设置为 true 以阻止操作:
// 阻止单元格编辑
sheet.BeforeCellEdit += (s, e) => e.IsCancelled = true;
// 阻止大纲折叠
sheet.BeforeOutlineCollapse += (s, e) => e.IsCancelled = true;
// 阻止选区变更
sheet.BeforeSelectionRangeChange += (s, e) => e.IsCancelled = true;
将编辑限制在指定范围
var editableRange = new RangePosition(3, 1, 2, 3);
sheet.SetRangeBorders(editableRange, BorderPositions.Outside, RangeBorderStyle.BlackSolid);
sheet[2, 1] = "Edit only allowed in this range:";
sheet.BeforeCellEdit += (s, e) =>
e.IsCancelled = !editableRange.Contains(e.Cell.Position);

跟踪数据变更
sheet.CellDataChanged += (s, e) =>
{
Console.WriteLine($"Cell {e.Cell.Address} changed to: {e.Cell.Data}");
};
sheet.RangeDataChanged += (s, e) =>
{
Console.WriteLine($"Range {e.Range.ToAddress()} data changed");
};
自定义按键处理
sheet.BeforeCellKeyDown += (s, e) =>
{
if (e.KeyCode == KeyCode.Enter)
{
e.IsCancelled = true;
// 自定义导航
sheet.SelectRange(sheet.SelectionRange.Row + 1, 0, 1, 1);
}
};
相关主题