找回密码
 立即注册

QQ登录

只需一步,快速开始

CanYou1
高级会员   /  发表于:2015-8-10 22:39:00
21#
回复 20楼Alice的帖子

Alice,LoadingRow事件虽然能解决LoadingRow时的重复提示,但我们这还有另一个场景,加了LoadingRow事件也是不行,它还会出现得复提示。我今天花了有4个小时想做这个Demo给你,但是太难做了。我看到你们C1DataGrid里的e.Row.Errors这个集合提供了一个CollectionChanged事件,可不可以在这个事件里来想办法过滤重复提示呢?
回复 使用道具 举报
Alice
社区贡献组   /  发表于:2015-8-11 10:38:00
22#
回复 21楼CanYou1的帖子

根据你的描述,CollectionChanged是不行的。
因为它是e.Row.Errors里的事件,你必须首先触发拿到e.Row.Errors,才能挂上这个事件。
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
CanYou1
高级会员   /  发表于:2015-8-11 11:45:00
23#
回复 22楼Alice的帖子

有没有办法在CollectionChanged事件里拿到e.Row.Errors这个集合然后对其操作?
回复 使用道具 举报
Alice
社区贡献组   /  发表于:2015-8-11 14:54:00
24#
回复 23楼CanYou1的帖子

很抱歉没有办法,CollectionChanged事件是属于e.Row.Error这个集合的。无法从一个集合中拿到一个事件,然后再拿到原集合,这不符合策略。
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
CanYou1
高级会员   /  发表于:2015-8-12 11:17:00
25#
Alice,我在21楼说当时花了4个小时但没能做出Demo,现在我只能先把它出现在我们实际项目里的出现的步骤和截图给你看下,看能不能帮忙解决:
1,打开新增表单:



2,双击C1DataGrid的“点击此处新增一行”那里



3,弹出一个MessageBox提示说需要先填别的信息(这是在C1DataGrid的BeginningNewRow事件里做的,且设了e.Cancel=true)





4,点击”确定“按钮让MessageBox消失后,刚刚点击的C1DataGrid那一行的行头就出现了错误提示:



5,鼠标放到提示处,看到很多的重复提示:



到这对于用户来说就会很奇怪:
1)这一行都还没有新增(也还没进入编辑状态,因为e.cancel=true了),也就是行还不存在,但这行的行头为什么会出现错误提示?
2)出来的提示为什么会重复?

而我个人是觉得,这时不应有错误提示,其次就算有错误提示,我要用代码来去重复,可我找不到入口。
所以麻烦你再帮忙看看怎么办,就是这个情况,让我们很头疼,一直没法解决(已经加了LoadingRow事件并在里面去重复,但没起作用)

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 使用道具 举报
Alice
社区贡献组   /  发表于:2015-8-12 14:51:00
26#
回复 25楼CanYou1的帖子

谢谢提供的图片。
因为仅仅是图片的资料,我需要想办法去重现你的场景,就加大了处理问题的复杂度。
我这里尝试去模拟你的场景,看看能不能找到合适的办法,不过这需要时间来验证。
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
CanYou1
高级会员   /  发表于:2015-8-12 15:22:00
27#
回复 26楼Alice的帖子

谢谢你的理解,也谢谢你的帮助,期待你的好消息。
回复 使用道具 举报
Alice
社区贡献组   /  发表于:2015-8-12 17:34:00
28#
回复 27楼CanYou1的帖子

针对你的问题,主要有三点建议:
1.有一个校验相关的事件,叫做:CanceledNewRow ,在这个事件里clear 重复。
2.之前我们还提到的CommittedRowEdit/CommittedEdit/CommittedNewRow/LoadingRow事件,都是和校验相关的事件。
3.在LoadingRow里修改的小建议,代码参考:

  1. void grid_LoadingRow(object sender, C1.WPF.DataGrid.DataGridRowEventArgs e)
  2.         {
  3.             if (e.Row.DataItem is INotifyPropertyChanged)
  4.             {
  5.                 var data = e.Row.DataItem as INotifyPropertyChanged;
  6.                 data.PropertyChanged += Data_PropertyChanged;
  7.             }
  8.             ClearDuplicateRowError(e.Row.Errors);
  9.         }

  10.         private void Data_PropertyChanged(object sender, PropertyChangedEventArgs e)
  11.         {
  12.             var row = grid.Rows[sender];
  13.             if (row!=null)
  14.             {
  15.                 ClearDuplicateRowError(row.Errors);
  16.             }
  17.         }
复制代码

你可以参考下上述建议,希望对你有帮助。
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
CanYou1
高级会员   /  发表于:2015-8-13 11:58:00
29#
回复 28楼Alice的帖子

Alice,
1,我加了CanceledNewRow和CanceledRowEdit事件,在里面加了去除Error的方法,但是发在这两个事件并没有被触发(取消行编辑是在C1DataGrid的BeginningNewRow事件里有e.Cancel=true实现的,见25楼第3点)。

2,你在LoadingRow事件里作的改进是有什么好处?为什么那样做?我需要评估下是否必要
回复 使用道具 举报
Alice
社区贡献组   /  发表于:2015-8-13 13:48:00
30#
回复 29楼CanYou1的帖子

很抱歉没有demo很难重现你的问题。
1.有关没有触发最好有相关的demo,否则很难调查。
2.某一属性值改变的时候发出通知。
有关这个接口可以参考微软的msdn:
https://msdn.microsoft.com/zh-cn ... ropertychanged.aspx

希望对你评估有帮助。
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部