使用Spread单元格验证功能
您可以使用内置的验证器和操作来验证单元格中的数据。验证器允许您设置验证条件,例如最小值和最大值。这些操作使您可以在验证失败(单元格颜色更改,声音等)时通知用户。以下为各种类型的验证器:[*]CharFormatValidator
[*]CompareCellValidator
[*]CompareStringValidator
[*]CompareValueValidator
[*]EncodingValidator
[*]ExcludeListValidator
[*]IncludeListValidator
[*]PairCharValidator
[*]RangeValidator
[*]RegularExpressionValidator
[*]RequiredFieldValidator
[*]RequiredTypeValidator
[*]SurrogateCharValidator
[*]TextLengthValidator
验证结果可以用以下形式提示
[*]下划线通知(LineNotify)
[*]单元格样式通知(CellStyleNotify)
[*]图标通知(IconNotify)
[*]声音通知(SoundNotify)
[*]工具提示通知(TipNotify)
[*]焦点变更通知(FocusProcess)
[*]先前的值通知(ValueProcess)
[*]消息框通知(MessageBoxNotify)
[*]三态图标通知(ThreeStateIconNotify)
通过一个实例说明,如何使用
客户有以下需求,需要验证当前Sheet中(1,1)单元格中的文本等于文本列表中的某一项,否则验证为错误数据
通过以下方式在界面提示用户,并删除错误数据
1.在右侧显示错误图标
2.弹窗错误弹窗
对于上述需求验证单元格中的文本等于文本列表中的某一项,我们可以用IncludeListValidator,
FarPoint.Win.Spread.IncludeListValidator ilist = new FarPoint.Win.Spread.IncludeListValidator();
ilist.Candidates = new string[] { "Bird", "Deer", "Squirrel", "Lizard" };
给IncludeListValidator中加入一个IconNotify,以显示错误图标,DoActionReason 属性用于控制错误信息显示的时间。在编辑完成后显示
FarPoint.Win.Spread.IconNotify linen = new FarPoint.Win.Spread.IconNotify();
linen.Icon = Properties.Resources.Spread;
linen.IconAlignment = ContentAlignment.MiddleRight;
linen.IconTip = "数据验证失败";
linen.DoActionReason = FarPoint.Win.Spread.ValidateReasons.EndEdit;
给IncludeListValidator中加入一个MessageBoxNotify,用于显示错误弹窗
ilist.Actions.Add(
new MessageBoxNotify() {
Icon = MessageBoxIcon.Error,
Caption = "错误",
Message = "数据验证失败",
DoActionReason= ValidateReasons.EndEdit
}
);
最后,将此验证器添加到(1,1)单元格中
fpSpread1.Sheets.AddValidators(new FarPoint.Win.Spread.Model.CellRange(1, 1, 1, 1), ilist);
以上代码,已经实现了错误图标提示和错误弹窗提示
我们还需要删除错误数据
使用CellValidateInfoNeeded事件判断验证是否通过
fpSpread1.CellValidateInfoNeeded += FpSpread1_CellValidateInfoNeeded;
另加一个bool变量CellValueisValid 用于保存验证是否通过,然后在FpSpread的Change事件中依据CellValueisValid的值判断是否删除数据
bool CellValueisValid = true;
private void FpSpread1_CellValidateInfoNeeded(object sender, CellValidateInfoNeededEventArgs e)
{
if (!e.IsValid)
{
CellValueisValid = false;
}
}
private void FpSpread1_Change(object sender, ChangeEventArgs e)
{
if(CellValueisValid == false)
{
fpSpread1.ActiveSheet.ActiveCell.ResetText();
CellValueisValid = true;
}
}
以下为运行结果
页:
[1]