找回密码
 立即注册

QQ登录

只需一步,快速开始

zjutwb

高级会员

15

主题

32

帖子

1467

积分

高级会员

积分
1467

活字格认证

zjutwb
高级会员   /  发表于:2015-1-8 16:14  /   查看:6915  /  回复:5
如下图中,如何判断当前的sheet中有无效的数据,而且最好能得出有几个无效的,并能逐一定位

无标题.jpg (15.16 KB, 下载次数: 525)

5 个回复

倒序浏览
iceman
社区贡献组   /  发表于:2015-1-8 17:21:00
沙发
回复 1楼zjutwb的帖子

可以使用 DataValidator 实现这个Case,测试代码如下:

  1.         public MainPage()
  2.         {
  3.             InitializeComponent();
  4.             gcSpreadSheet1.HighlightInvalidData = true;
  5.             var valid = GrapeCity.Windows.SpreadSheet.Data.DataValidator.CreateListValidator("5,10,15,20");
  6.             gcSpreadSheet1.Sheets[0].Cells[0, 1].DataValidator = valid;
  7.             gcSpreadSheet1.Sheets[0].Cells[0, 0].Text = "5, 10, 15, and 20 are valid numbers.";

  8.             var valid1 = GrapeCity.Windows.SpreadSheet.Data.DataValidator.CreateNumberValidator(GrapeCity.Windows.SpreadSheet.Data.ComparisonOperator.GreaterThan, "5", "20", true);
  9.             gcSpreadSheet1.Sheets[0].Cells[1, 1].DataValidator = valid1;
  10.             gcSpreadSheet1.Sheets[0].Cells[1, 0].Text = "A number greater than 5 is valid.";

  11.             var valid2 = GrapeCity.Windows.SpreadSheet.Data.DataValidator.CreateTextLengthValidator(GrapeCity.Windows.SpreadSheet.Data.ComparisonOperator.GreaterThan, "4", "20");
  12.             gcSpreadSheet1.Sheets[0].Cells[2, 1].DataValidator = valid2;
  13.             gcSpreadSheet1.Sheets[0].Cells[2, 0].Text = "Type more than four characters.";
  14.         }
  15.         List<Cell> cells = new List<Cell>();
  16.         private void gcSpreadSheet1_ValidationError(object sender, GrapeCity.Windows.SpreadSheet.UI.ValidationErrorEventArgs e)
  17.         {
  18.             cells.Add(this.gcSpreadSheet1.ActiveSheet.Cells[e.Row, e.Column]);
  19.         }
复制代码
回复 使用道具 举报
zjutwb
高级会员   /  发表于:2015-1-8 18:49:00
板凳
是把有错误的cell放进cells里,再查看cells吗?  那么,像上面的例子里,我修改了2个,还有一个错误,会自动更新吗?  根据你做的测试还有点问题,弱弱的问下,在哪里怎么调用gcSpreadSheet1_ValidationError(object sender, GrapeCity.Windows.SpreadSheet.UI.ValidationErrorEventArgs e)函数?
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2015-1-9 09:36:00
地板
回复 3楼zjutwb的帖子

我理解你的问题如下:

1.使单元格具有校验功能。
Spread 提供 DataValidator 类用于校验数据,如果错误则在单元格上用红色椭圆标注
2.记录错误数据位置,用于定位单元格。
List<Cell> cells 用于记录错误单元格信息,便于定位。
当你在单元格中输入数据不满足DataValidator 实例校验规则时,则触发ValidationError事件。

以上你可以使用 2# 代码创建新工程测试,在Cells[1, 1]输入“1”查看效果。

为了给你提供更优质的服务,请对本次服务进行评分。我们会认真对待你提出的宝贵意见,谢谢
回复 使用道具 举报
zjutwb
高级会员   /  发表于:2015-1-9 13:45:00
5#
使单元格具有校验功能这个没问题,就是下面判断当前sheets是否有无效数字还没解决,是用cells.count来判断吗? 怎么用cells?
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2015-1-9 15:05:00
6#
回复 5楼zjutwb的帖子

是的,你理解的是正确的。

可以在 ValueChanged  事件中结合 gcSpreadSheet1.Sheets[0].IsValid(1, 1, 10)方法进行List中错误项的移除, ValidationError 事件进行list错误项的添加。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部