带有列表验证选择的电子表格齿轮单元改变了事件?

时间:2014-12-17 15:58:01

标签: spreadsheetgear

我在几个单元格上有列表验证,如果从下拉列表(过滤器列表)中选择/更改了值,则希望对单元格进行着色。对于常规单元格,我使用EndEdit事件,在这种情况下显然不会触发。

有谁可以请我指出正确的事件吗?

提前致谢!

1 个答案:

答案 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接口成员的文档。