我在几个单元格上有列表验证,如果从下拉列表(过滤器列表)中选择/更改了值,则希望对单元格进行着色。对于常规单元格,我使用EndEdit事件,在这种情况下显然不会触发。
有谁可以请我指出正确的事件吗?
提前致谢!
答案 0 :(得分:0)
没有针对单元格验证下拉选择操作触发的特定事件。 WorkbookView。CellEndEdit事件仅用于"编辑模式" - 当用户手动将某个值键入单元格时 - SpreadsheetGear API中没有任何内容可以扩展编辑模式以包含其他输入形式。
每当对单元格进行更改时,WorkbookView。RangeChanged事件将触发,包括通过单元格验证列表框;但是,许多其他动作也会触发此事件,例如更改单元格的NumberFormat,字体格式等;或者以某种其他方式输入单元格值,例如粘贴值,FillDown,Clear等。但是,您可以使用此事件在合理的保证范围内获取所需的信息。
下面是一些示例代码,演示了如何检测是否从包含单元格验证的单个单元格调用了RangeChanged。附加条件用于确保用户通过验证下拉列表更改值来触发事件。同样,由于上面列出的原因,这仍然不是100%万无一失。
private void workbookView_RangeChanged(object sender, SpreadsheetGear.Windows.Controls.RangeChangedEventArgs e)
{
// Did this RangeChanged action affect only a single cell?
if(e.Range.CellCount == 1)
{
IRange cell = e.Range;
// Does the cell even have cell validation?
if(cell.HasValidation)
{
IValidation validation = e.Range.Validation;
// Is the validation applied to this cell of the "List" type and
// does the inputted value pass validation checks?
if(validation.Type == ValidationType.List && validation.Value)
{
// Do something here, such as shade the cell...
cell.Interior.Color = SpreadsheetGear.Colors.LightGray;
}
}
}
}
有关上面使用的每个属性的详细信息,请参阅IValidation接口成员的文档。