找回密码
 立即注册

QQ登录

只需一步,快速开始

adong613

论坛元老

6

主题

33

帖子

1万

积分

论坛元老

积分
14246

活字格认证

最新发帖
adong613
论坛元老   /  发表于:2012-7-17 02:02  /   查看:7491  /  回复:8
c/s程序,用的是spread5 for winform
我fpSpread1绑定了数据,当添加新行,输入数据,或者修改现有的一行时,应该会触发fpSpread1_Validating事件(没有CellValidating事件),可我设了断点,这个事件一直没有触发,另外fpSpread1_TextChanged也一直没有触发....不知道还有什么地方需要设置。
我用这个事件的主要目的,是判断单元格值的有效性?不知道是否有这方面的例子,请老师指点

8 个回复

倒序浏览
ZenosZeng讲师达人认证 悬赏达人认证
超级版主   /  发表于:2012-7-17 09:38:00
沙发
adong613  你好

Validating事件回来离开Spread控件是触发,如果只是在Spread中切换单元格是不会触发的。

在Spread中验证单元格值是否有效可以使用这些方法:
1、使用CellType进行验证,比如数字类型的可以指定FarPoint.Win.Spread.CellType.NumberCellType(推荐方法)
2、TextChange事件时继承与.NET标准System.Windows.Forms.Control类,在Spread中可以使用Change事件来代替
3、修改单元格或者离开单元格时会触发EditModeOff、LeaveCell等事件
回复 使用道具 举报
adong613
论坛元老   /  发表于:2012-7-17 10:11:00
板凳
我现在用的就是LeaveCell判断,如输入cells(0,0)完之后,点cells(0,1)编辑,在cells(0,0)LeaveCell事件中判断bool cellValidating = fpSpread1_CellValidating();可是它还会触发cells(0,1)的EnterCell事件,在这里我又得判断一次cellValidating,值无效,则设值的cells(0,0)为活动单元格,感觉有点烦琐,不像datagridview的CellValidating,e.cancel就可以实现,不知道是否有相似的方法,谢谢了~
回复 使用道具 举报
adong613
论坛元老   /  发表于:2012-7-17 14:35:00
地板
回复 2楼dof的帖子

我现在用的就是LeaveCell判断,如输入cells(0,0)完之后,点cells(0,1)编辑,在cells(0,0)LeaveCell事件中判断bool cellValidating = fpSpread1_CellValidating();可是它还会触发cells(0,1)的EnterCell事件,在这里我又得判断一次cellValidating,值无效,则设值的cells(0,0)为活动单元格,感觉有点烦琐,不像datagridview的CellValidating,e.cancel就可以实现,不知道是否有相似的方法,谢谢了~
回复 使用道具 举报
ZenosZeng讲师达人认证 悬赏达人认证
超级版主   /  发表于:2012-7-17 18:23:00
5#
adong613 你好

能结合你的问题发一个Demo给我调试吗,可能是因为我们操作步骤不同,我的现象和你的不一样。
回复 使用道具 举报
adong613
论坛元老   /  发表于:2012-7-18 12:48:00
6#

demo测试

发了个demo,烦请调试

SpreadTest.rar

48.65 KB, 下载次数: 586

回复 使用道具 举报
ZenosZeng讲师达人认证 悬赏达人认证
超级版主   /  发表于:2012-7-18 16:27:00
7#
Hi,adong613

我调试了你的程序,从代码来看,你是想在离开单元格是验证数据是否正确,如何不正确就不能离开该单元格,如果是这样的需求你可以设置e.Cancel = true;
  1.     private void fpSpread1_LeaveCell(object sender, FarPoint.Win.Spread.LeaveCellEventArgs e)
  2.     {
  3.         if (e.Column == 0)
  4.         {
  5.             if (fpSpread1.Sheets[0].Cells[e.Row, e.Column].Text != "1")
  6.             {
  7.                 cellValidate = false;
  8.                 MessageBox.Show("数据无效");
  9.                 fpSpread1.Sheets[0].SetActiveCell(e.Row, e.Column);
  10.                 e.Cancel = true;
  11.             }
  12.             else { cellValidate = true; }
  13.         }
  14.         //他还会调用fpSpread1_EnterCell
  15.     }
复制代码
回复 使用道具 举报
adong613
论坛元老   /  发表于:2012-7-18 19:17:00
8#
对了,谢谢啊~
我昨天看了,好像没有e.Cancel 属性,这次怎么有了呢,晕死,当时不知道看了哪里的
回复 使用道具 举报
ZenosZeng讲师达人认证 悬赏达人认证
超级版主   /  发表于:2012-7-18 22:05:00
9#
是的,有时候自己调试程序就是容易出现这种情况。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部