找回密码
 立即注册

QQ登录

只需一步,快速开始

q406157290

高级会员

124

主题

531

帖子

1359

积分

高级会员

积分
1359

活字格认证

q406157290
高级会员   /  发表于:2015-8-31 09:21  /   查看:19843  /  回复:33


上面的是运行结果和Demo

最后一列只是用来显示的,而没用进行绑定,当出现验证时,如何让最后一列不进行验证,也就是没有红色的验证边框,
谢谢您(Demo在最后一个tab里面)

下面这个demo跟上面的基本一样但是 就是在myCheck_RowEditEnding添加了

foreach (Column c in flexGrid.Columns)
            {
                foreach (Row r in flexGrid.Rows)
                {
                    if (!string.IsNullOrEmpty(r.GetErrors(c)))
                    {
                        e.Cancel = true;
                        return;
                    }
                }
            }
为什么验证就不显示出来了求解

本帖子中包含更多资源

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

x

33 个回复

正序浏览
Alice
社区贡献组   /  发表于:2015-9-21 18:22:00
34#
回复 33楼KNight的帖子

谢谢反馈。此问题关闭,如果有新问题请开新帖。
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
KNight
中级会员   /  发表于:2015-9-17 14:42:00
33#
回复 32楼q406157290的帖子

如果在RowEditEnding事件里不提交新行,只是给新行设置了UpdateErrorMessage,那么在CellFactory里遍历然后GetErrors是获取不到错误信息的(27#已解释)。我的意思就是你在RowEditEnding事件里检测到错误,并把错误存储到一个变量里,然后在CellFactory中就通过那个存储变量来查找错误信息,并处理(可以存储有错误的DataItem,在CellFactory可以判断重绘的当前行的DataItem在不在这个列表里,并获取其中的UpdateErrorMessage);

至于errorMessage的显示,既然不采用C1FlexGrid自带的,那就自己加上吧,在CellFactory中判断如果为新行,而且通过上面介绍的方式获取到排它错误信息时,手动设置错误提示信息即可:
  1. string errors = GetErrors(rng);// 通过自己的方式获取排它错误
  2. if (!string.IsNullOrEmpty(errors))
  3. {
  4.         grid.ErrorStyle.Apply(bdr);
  5.         this.SetErrorTip(grid, bdr, errors);
  6. }
复制代码
你可以试试看,由于没有Demo验证,我也只是理论理论

评分

参与人数 1金币 +999 收起 理由
Alice + 999 奖励金币

查看全部评分

回复 使用道具 举报
q406157290
高级会员   /  发表于:2015-9-17 14:06:00
32#
回复 31楼KNight的帖子

errorMessage是不是就不会显示了, 在循环变了行和列有没有错的时候就不对了吧
回复 使用道具 举报
KNight
中级会员   /  发表于:2015-9-17 09:02:00
31#
回复 30楼q406157290的帖子

那你干脆都在CellFactory中处理算了,包括新行的排它错误红框提示,也在CellFactory中完成呗,当在CellFactory中判断为新行时,自己手动获取该行的排它错误信息,如果该行有排它错误信息,则重绘该单元格border样式,这样就不用在RowEditEnding事件中手动提交然后交由C1FlexGrid默认的CellFactory绘制排它错误提示框了;
回复 使用道具 举报
q406157290
高级会员   /  发表于:2015-9-17 08:37:00
30#
回复 27楼KNight的帖子

上次这个手动提交确实是个很好的方法
但是我的逻辑处理需要新追加行的样式跟普通行是不一样的,我是在CellFactory中判断是否为新规行然后设定样式的,如果手动提交上去就没有新规行了,本应该的新规行也成了普通行,样式就变了,所以还有别的处理方法吗真的麻烦您了
回复 使用道具 举报
Alice
社区贡献组   /  发表于:2015-9-16 11:28:00
29#
回复 28楼q406157290的帖子

谢谢反馈。
此问题关闭,如果有新问题请开新帖。
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
q406157290
高级会员   /  发表于:2015-9-16 08:37:00
28#
回复 27楼KNight的帖子

太优秀了     
太厉害了  
我的难题都让您给解决了
真是太给力了
回复 使用道具 举报
KNight
中级会员   /  发表于:2015-9-15 22:30:00
27#
回复 25楼q406157290的帖子

实际上,和普通行(已加载数据的行)不同的是,新增行时,就是双击之后C1FlexGrid添加了个新行之后,当(Name为空)离开该行进入RowEditEnding事件时,实际上这一行还未真正提交,你可以在该事件里查看((ListCollectionView)flexGrid.CollectionView).IsAddingNew的状态,是true,而普通行该状态为false,IsEditingItem为true;此时即使你在该事件里对UpdateErrorMessage排他错误进行赋值,最后r.GetErrors(c)也获取不到你刚赋值的错误信息;同时也可以参考r.GetErrors(c)其中一个判断条件:
  1. IEditableCollectionView editableCollectionView = this.Grid.CollectionView as IEditableCollectionView;
  2. if (editableCollectionView != null && this.DataItem == editableCollectionView.CurrentAddItem)
  3. {
  4.         return null;
  5. }
复制代码


即,如果它判断当前行为新增行时,是不会去处理获取排他错误的;而你可以在RowEditEnding加入如下代码进行监听:
  1. IEditableCollectionView editableCollectionView = flexGrid.CollectionView as IEditableCollectionView;
  2. if (editableCollectionView != null && flexGrid.SelectedItem == editableCollectionView.CurrentAddItem)
  3. {
  4.         MessageBox.Show("新增行仍未提交");
  5. }
复制代码

普通行是不会进入if里面的,只有新增行时才会,可见此时新增行实际上仍未提交;

参考解决办法:
  1. if (((ListCollectionView)flexGrid.CollectionView).IsAddingNew)
  2. {
  3.         // 手动提交
  4.         ((ListCollectionView)flexGrid.CollectionView).CommitNew();
  5.         // 更新
  6.         ((ListCollectionView)flexGrid.CollectionView).Refresh();
  7.         // 重新进入行编辑状态,不然再次点击其他行,改行实际上已经结束编辑状态了
  8.         ((ListCollectionView)flexGrid.CollectionView).EditItem(currentAddItem);
  9. }
复制代码


排他信息仍然在:
  1. public string this[string propertyName]
  2. {
  3.         get
  4.         {
  5.                 if (!string.IsNullOrEmpty(UpdateErrorMessage))
  6.                 {
  7.                         return UpdateErrorMessage;
  8.                 }
  9.         if (propertyName == "Name" && string.IsNullOrWhiteSpace(Name))
  10.         {
  11.             return "Name is invalid!";
  12.         }

  13.                 return "";
  14.         }
  15. }
复制代码

处处理;
而之前RowEditEnding事件里对排他错误处理可以注释掉,换成我上面写的手动提交并更新;

评分

参与人数 1金币 +500 满意度 +5 收起 理由
q406157290 + 500 + 5 奖励金币

查看全部评分

回复 使用道具 举报
KNight
中级会员   /  发表于:2015-9-15 18:33:00
26#
回复 25楼q406157290的帖子

刚下班,晚上回去帮您搞定
回复 使用道具 举报
1234下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部