找回密码
 立即注册

QQ登录

只需一步,快速开始

q406157290

高级会员

124

主题

531

帖子

1359

积分

高级会员

积分
1359

活字格认证

q406157290
高级会员   /  发表于:2015-8-31 09:21  /   查看:22009  /  回复: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 个回复

倒序浏览
KNight
中级会员   /  发表于:2015-8-31 14:48:00
沙发
回复 1楼q406157290的帖子

第一个问题的原因是,C1FlexGrid在绘制最后一列单元格时,要获取错误信息时,该列在绑定数据中找不到对应列,所以直接取该行对象的错误信息,即:
  1. string IDataErrorInfo.Error
  2. {
  3.     get
  4.     {
  5.         if (!string.IsNullOrEmpty(UpdateErrorMessage))
  6.         {
  7.             return UpdateErrorMessage;
  8.         }
  9.         return "";
  10.     }
  11. }
复制代码

也就是有该单元格的错误信息,所以会绘制红色边框;之所以前面几列此时没有红色边框,是因为前面几列在数据源绑定里有对应列,而且在属性处验证通过,即:
  1. string IDataErrorInfo.this[string columnName]
  2. {
  3.         get
  4.         {
  5.                 return "";
  6.         }
  7. }
复制代码

此时返回的错误信息是空串,所以此时前几列都没有绘制红色边框;

我现在得出的解决办法是在自定义的CellFactory中,在创建单元格内容之前grid.ShowErrors = false;,然后创建完最后一列单元格后再设置grid.ShowErrors = true;即可:
  1. public class MyCellFactory : CellFactory
  2. {
  3.         public override void CreateCellContent(C1FlexGrid grid, Border bdr, CellRange rng)
  4.         {
  5.                 if (rng.Row == 0 && rng.Column == grid.Columns.Count - 1)
  6.                 {
  7.                         grid.ShowErrors = false;
  8.                         base.CreateCellContent(grid, bdr, rng);
  9.                         grid.ShowErrors = true;
  10.                 }
  11.                 else
  12.                 {
  13.                         base.CreateCellContent(grid, bdr, rng);
  14.                 }
  15.         }
  16. }
复制代码


仅供参考
回复 使用道具 举报
q406157290
高级会员   /  发表于:2015-8-31 15:32:00
板凳
回复 2楼KNight的帖子

谢谢您  我稍后试下  第二个问题呢
回复 使用道具 举报
q406157290
高级会员   /  发表于:2015-8-31 17:13:00
地板
回复 2楼KNight的帖子

上面说的这个有试  数据量多的时候 页面就反应特别的慢了呢  特别的慢
回复 使用道具 举报
KNight
中级会员   /  发表于:2015-9-1 10:06:00
5#
回复 4楼q406157290的帖子

速度很慢?!!:~  这个。。。我可没有大数据测试,换其他的试试吧,
  1. public override void CreateCellContent(C1FlexGrid grid, Border bdr, CellRange rng)
  2. {
  3.         base.CreateCellContent(grid, bdr, rng);
  4.         if (rng.Row == 0 && rng.Column == grid.Columns.Count - 1)
  5.         {
  6.                 bdr.BorderThickness = new Thickness(0, 0, 1, 1);
  7.                 bdr.BorderBrush = new SolidColorBrush(Color.FromArgb(255, 240, 240, 240));
  8.                 bdr.UpdateDefaultStyle();
  9.         }
  10. }
复制代码

在CreateCellContent之后把该单元格的边框样式还原回去试试。。。
回复 使用道具 举报
Alice
社区贡献组   /  发表于:2015-9-1 11:38:00
6#
回复 4楼q406157290的帖子

很抱歉。
我看到2楼和4楼都有针对你的问题的相关回复。
如果依然有问题,请指出。
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
q406157290
高级会员   /  发表于:2015-9-1 13:12:00
7#
回复 6楼Alice的帖子

你们没有解决方法吗
回复 使用道具 举报
KNight
中级会员   /  发表于:2015-9-1 13:20:00
8#
回复 7楼q406157290的帖子

请问5L的解决方法可以解决大数据加载时速度慢的问题吗?

还有,您的第二个问题,在RowEditEnding事件里遍历每个单元格,并获取其错误信息,如果存在错误信息,则设置e.Cancel = true;,这样就导致仍留在编辑状态;即时第一次所有单元格都没有错误信息,您的这句代码
  1. if (e.Row == 0 || e.Row == 1)
  2. {
  3.         e.Cancel = true;
  4.    
  5.      ((MySelf)flexGrid.SelectedItem).UpdateErrorMessage = "Error!!!";
  6. }
复制代码

也导致了一直无法退出编辑状态;不知道您这第二个问题是要实现什么东西?
回复 使用道具 举报
q406157290
高级会员   /  发表于:2015-9-1 14:36:00
9#
回复 8楼KNight的帖子

想要实现的就是 当出现验证错误 焦点就不能离开本行  目的是按ESC能触发e.cancleEidt == true 然后再把错误前的值设置回去
回复 使用道具 举报
Alice
社区贡献组   /  发表于:2015-9-1 18:21:00
10#
回复 9楼q406157290的帖子

C1FlexGrid的校验的方法包含:Throw on Setters, IDataErrorInfo, INotifyDataErrorInfo, Validation Attributes等方法。

可以参考参考随机安装示例,有演示如何使用校验:
\Documents\ComponentOne Samples\WPF\C1.WPF.FlexGrid\CS\Validation\Validation

@KNight也根据你的Demo给出了相关的方案。但是你的Demo比较特殊,有自己特别的需求。
有些特殊需求控件没有支持,就需要比较绕的方案来解决问题。
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

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