找回密码
 立即注册

QQ登录

只需一步,快速开始

swejet 悬赏达人认证 活字格认证
论坛元老   /  发表于:2015-1-30 18:04  /   查看:6589  /  回复:5
如何在代码中为单元格指定数据类型?只能在SetValue之前对数据类型进行约束吗?

5 个回复

倒序浏览
iceman
社区贡献组   /  发表于:2015-2-2 14:03:00
沙发
回复 1楼swejet的帖子

Spread 提供了验证机制-DataValidator:

  1. gcSpreadSheet1.HighlightInvalidData = true;
  2. var valid = GrapeCity.Windows.SpreadSheet.Data.DataValidator.CreateListValidator("5,10,15,20");
  3. gcSpreadSheet1.Sheets[0].Cells[0, 1].DataValidator = valid;
  4. gcSpreadSheet1.Sheets[0].Cells[0, 0].Text = "5, 10, 15, and 20 are valid numbers.";
  5.             
  6. var valid1 = GrapeCity.Windows.SpreadSheet.Data.DataValidator.CreateNumberValidator(GrapeCity.Windows.SpreadSheet.Data.ComparisonOperator.GreaterThan, "5", "20", true);
  7. gcSpreadSheet1.Sheets[0].Cells[1, 1].DataValidator = valid1;
  8. gcSpreadSheet1.Sheets[0].Cells[1,0].Text = "A number greater than 5 is valid.";

  9. var valid2 = GrapeCity.Windows.SpreadSheet.Data.DataValidator.CreateTextLengthValidator(GrapeCity.Windows.SpreadSheet.Data.ComparisonOperator.GreaterThan, "4", "20");
  10. gcSpreadSheet1.Sheets[0].Cells[2, 1].DataValidator = valid2;
  11. gcSpreadSheet1.Sheets[0].Cells[2, 0].Text = "Type more than four characters.";
复制代码


并且可以通过 ValidationError 来接收错误输入字符。
回复 使用道具 举报
swejet悬赏达人认证 活字格认证
论坛元老   /  发表于:2015-2-2 14:43:00
板凳
那么用于公式计算的单元格内的值就是依赖于 Cell.SetValue之前这个值的类型了? 就是 setValue(int) 里面的值就作为int处理 可以计算出数值 setValue(string)就作为0计算?
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2015-2-2 18:04:00
地板
回复 3楼swejet的帖子

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

如果是通过 Setvalue 方法来设置值,可以在设置之前校验。
如果是用户在前台设置,可以通过 SheetView 的 CellChanged 事件来捕获:

  1.         public MainPage()
  2.         {
  3.             InitializeComponent();

  4.             double dvalue = 12345.6789;
  5.             gcSpreadSheet1.ActiveSheet.CellChanged += ActiveSheet_CellChanged;
  6.             gcSpreadSheet1.Sheets[0].Cells[0, 0].Formatter = new GrapeCity.Windows.SpreadSheet.Data.GeneralFormatter(GrapeCity.Windows.SpreadSheet.Data.FormatMode.StandardNumericMode, "C");
  7.             gcSpreadSheet1.Sheets[0].Cells[0, 0].Value = dvalue;

  8.             gcSpreadSheet1.Sheets[0].Cells[0, 1].Formatter = new GrapeCity.Windows.SpreadSheet.Data.GeneralFormatter(GrapeCity.Windows.SpreadSheet.Data.FormatMode.StandardNumericMode, "C");
  9.             gcSpreadSheet1.Sheets[0].Cells[0, 1].Value = dvalue;

  10.             gcSpreadSheet1.Sheets[0].Cells[0, 2].Formatter = new GrapeCity.Windows.SpreadSheet.Data.GeneralFormatter(GrapeCity.Windows.SpreadSheet.Data.FormatMode.StandardNumericMode, "C");
  11.             gcSpreadSheet1.Sheets[0].Cells[0, 2].Formula = "SUM(A1:B1)";

  12.             gcSpreadSheet1.Invalidate();

  13.         }

  14.         void ActiveSheet_CellChanged(object sender, GrapeCity.Windows.SpreadSheet.Data.CellChangedEventArgs e)
  15.         {

  16.         }
复制代码
回复 使用道具 举报
swejet悬赏达人认证 活字格认证
论坛元老   /  发表于:2015-2-3 13:58:00
5#
好的 谢谢
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2015-2-3 18:53:00
6#
回复 5楼swejet的帖子

客气了,有问题欢迎继续交流。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部