找回密码
 立即注册

QQ登录

只需一步,快速开始

q406157290
高级会员   /  发表于:2015-9-15 17:56:00
25#
回复 24楼KNight的帖子

普通行没有问题 可是新追加的行的check不显示呢下面是demo辛苦您了

本帖子中包含更多资源

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

x
回复 使用道具 举报
KNight
中级会员   /  发表于:2015-9-15 16:59:00
24#
回复 23楼q406157290的帖子

您说的不会处于编辑状态是指没有输入光标吗?我这里设置上e.cancle = true;依旧可以显示验证结果的,如果可以发一个Demo我给你看看吧。


这是我原先的代码(加入您所提到的e.Cancel = true;)
  1. private void myCheck_RowEditEnding(object sender, C1.WPF.FlexGrid.CellEditEventArgs e)
  2. {
  3.         C1FlexGrid flexGrid = sender as C1FlexGrid;
  4.         // 满足某些条件时出现验证错误
  5.         if (Verify(e.Row))
  6.         {
  7.                 ((DataObject)flexGrid.SelectedItem).UpdateErrorMessage = "Error!!";
  8.                 // 重绘当前行
  9.                 flexGrid.Invalidate(new CellRange(e.Row, -1, e.Row, flexGrid.Columns.Count - 1));
  10.                 // 重绘该行行头部分,已显示小红点提示
  11.                 flexGrid.RowHeaders.Invalidate();
  12.                 e.Cancel = true;
  13.         }
  14.         else
  15.         {
  16.                 ((DataObject)flexGrid.SelectedItem).UpdateErrorMessage = "";
  17.         }
  18.         // 当有验证错误时,取消行编辑
  19.         Row r = flexGrid.Rows[e.Row];
  20.         foreach (Column c in flexGrid.Columns)
  21.         {
  22.                 if (!string.IsNullOrEmpty(r.GetErrors(c)))
  23.                 {
  24.                         e.Cancel = true;
  25.                         return;
  26.                 }
  27.         }
  28. }
复制代码


执行效果如下图:

本帖子中包含更多资源

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

x
回复 使用道具 举报
q406157290
高级会员   /  发表于:2015-9-15 15:17:00
23#
回复 22楼KNight的帖子

呵呵 您说的这个我知道
但是看如下代码, 只要我把e.cancle = true;设置上  验证就不会出来了
  1. if (flexGrid.SelectedItem != null && currentAddItem != null && currentAddItem == flexGrid.SelectedItem)
  2.                 {
  3.                     //新追加行 如果姓名为空就check
  4.                     if (string.IsNullOrEmpty(((MySelf)flexGrid.SelectedItem).Name))
  5.                     {
  6.                         // 重绘当前行
  7.                         
  8.                         ((MySelf)flexGrid.SelectedItem).UpdateErrorMessage = "Error!!";
  9.                         // 重绘当前行
  10.                     flexGrid.Invalidate(new CellRange(e.Row, 0, e.Row, flexGrid.Columns.Count - 1));                        
  11. //e.Cancel = true;

  12.                         return;
  13.                     }
  14.                 }
复制代码

如果不设置e.cancle = true;该行就不会处于编辑状态了   只要设上e.cancle = true;model中的验证就不起作用了 我都纠结了好久了
回复 使用道具 举报
KNight
中级会员   /  发表于:2015-9-15 15:12:00
22#
回复 21楼q406157290的帖子

这个不是这块儿的原因,原因解释如下:
  1. public string this[string propertyName]
  2. {
  3.         get
  4.         {
  5.                 if (!string.IsNullOrEmpty(UpdateErrorMessage))
  6.                 {
  7.                         return UpdateErrorMessage;
  8.                 }

  9.                 return "";
  10.         }
  11. }
复制代码

这儿对对应属性验证返回的错误提示信息,当验证Name属性时,如果没有UpdateErrorMessage它最后都返回""。所以,如果你想要让Name字段不为空,就要在这里加入自己的验证方法:
  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. }
复制代码
回复 使用道具 举报
q406157290
高级会员   /  发表于:2015-9-15 14:27:00
21#
回复 17楼KNight的帖子

現在還有個問題当flexGrid 允许追加新行的时候,如果追加的新行如果姓名为空的话就要出现Check并且该行还要处于编辑状态,可是这时候红框 和错误Error不显示啊
  1. var currentAddItem = ((ListCollectionView)flexGrid.CollectionView).CurrentAddItem;
  2.                 if (flexGrid.SelectedItem != null && currentAddItem != null && currentAddItem == flexGrid.SelectedItem)
  3.                 {
  4.                     //新追加行 如果姓名为空就check
  5.                     if (string.IsNullOrEmpty(((MySelf)flexGrid.SelectedItem).Name))
  6.                     {
  7.                         ((MySelf)flexGrid.SelectedItem).UpdateErrorMessage = "Error!!";
  8.                         // 重绘当前行
  9.                         flexGrid.Invalidate(new CellRange(e.Row, 0, e.Row, flexGrid.Columns.Count - 1));
  10.                     }
  11.                 }
复制代码

在myCheck_RowEditEnding中添加这样的代码不错验证红框啊
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2015-9-11 09:54:00
20#
回复 19楼KNight的帖子

你帅呆了,+1000 金币~
回复 使用道具 举报
KNight
中级会员   /  发表于:2015-9-10 17:43:00
19#
回复 18楼q406157290的帖子

来个评分吧,谢谢

评分

参与人数 1金币 +999 收起 理由
iceman + 999 协助用户解决问题

查看全部评分

回复 使用道具 举报
q406157290
高级会员   /  发表于:2015-9-10 16:57:00
18#
回复 17楼KNight的帖子

厲害厲害
回复 使用道具 举报
KNight
中级会员   /  发表于:2015-9-10 15:03:00
17#
回复 16楼q406157290的帖子

用 flexGrid.RowHeaders.Invalidate(); 这个替换那两句更好吧,其实 flexGrid.Invalidate(new CellRange(e.Row, 0, e.Row, flexGrid.Columns.Count - 1)); 这句是绘制该行内容单元格的,就是每个单元格都显示红框;而前面那个小红点是行头部分的,在加一句 flexGrid.RowHeaders.Invalidate(/**该行行头单元格**/); 即可了;

评分

参与人数 1满意度 +5 收起 理由
q406157290 + 5 厲害啊

查看全部评分

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



您給我的demo我看過了
我发现还是有问题当出现验证错误时  每个单元格确实出现了红框,可是RowError没有出来,就是每行最前面的那个小红点(如图2所示)没有显示出来
可是当在进入某单元格编辑再结束编辑后 那个小红点就出来了
我想要的是出现验证错误后 前面的小红点也是要出来的
麻烦您再看看 谢谢您了

给您提完这个问题我后来把该问题解决了
您看对吗
  1. private void myCheck_RowEditEnding(object sender, C1.WPF.FlexGrid.CellEditEventArgs e)
  2.                 {
  3.                         C1FlexGrid flexGrid = sender as C1FlexGrid;
  4.                         // 满足某些条件时出现验证错误
  5.                         if (Verify(e.Row))
  6.                         {
  7.                                 ((MySelf)flexGrid.SelectedItem).UpdateErrorMessage = "Error!!";
  8.                                 // 重绘当前行
  9.                                 flexGrid.Invalidate(new CellRange(e.Row, 0, e.Row, flexGrid.Columns.Count - 1));
  10. flexGrid.StartEditing(false);//添加的就是这两行代码就可以了
  11. flexGrid.FinishEditing(false);                       
  12. }
  13.                         else
  14.                         {
  15.                                 ((MySelf)flexGrid.SelectedItem).UpdateErrorMessage = "";
  16.                         }
  17.                         // 当有验证错误时,取消行编辑
  18.                         Row r = flexGrid.Rows[e.Row];
  19.                         foreach (Column c in flexGrid.Columns)
  20.                         {
  21.                                 if (!string.IsNullOrEmpty(r.GetErrors(c)))
  22.                                 {
  23.                                         e.Cancel = true;
  24.                                         return;
  25.                                 }
  26.                         }
  27.                 }
复制代码

本帖子中包含更多资源

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

x
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部