[C1] C1FlexGrid 排除非绑定列的验证效果
一、前言
前提是 C1FlexGrid 中存在数据绑定列和自定义列(非数据绑定列),此时如果该行编辑后出现排他错误,自定义列也会出现验证结果的红色边框:

但是自定义列如果只是一些按钮操作,提示说明什么的,与前面绑定的数据并无关系,不想参与到前面的排他错误提示,也就是不想要这个红色边框,该如何处理?
二、实现
using System.Collections.ObjectModel;
using System.ComponentModel; namespace Validation
{
public class DataObject : IDataErrorInfo
{
public string Name { get; set; }
public int Age { get; set; }
public string Sex { get; set; }
public string UpdateErrorMessage { get; set; } // property-level
public string this[string propertyName]
{
get
{
if (!string.IsNullOrEmpty(UpdateErrorMessage))
{
return UpdateErrorMessage;
}
if (propertyName == "Name" && string.IsNullOrWhiteSpace(Name))
{
return "Name is invalid!";
} return string.Empty;
}
} // item-level
string IDataErrorInfo.Error
{
get
{
if (!string.IsNullOrEmpty(UpdateErrorMessage))
{
return UpdateErrorMessage;
} return "";
}
} // 初始化数据源
public static ObservableCollection<DataObject> InitDataSource()
{
ObservableCollection<DataObject> itemSource = new ObservableCollection<DataObject>();
itemSource.Add(new DataObject() {
Name = "aa",
Age = 11,
Sex = "男" });
itemSource.Add(new DataObject() {
Name = "vv",
Age = 15,
Sex = "男" });
itemSource.Add(new DataObject() {
Name = "aa",
Age = 11,
Sex = "男" });
itemSource.Add(new DataObject() {
Name = "aa",
Age = 11,
Sex = "男" });
itemSource.Add(new DataObject() {
Name = "aa",
Age = 11,
Sex = "男" });
itemSource.Add(new DataObject() {
Name = "aa",
Age = 11,
Sex = "男" });
itemSource.Add(new DataObject() {
Name = "aa",
Age = 11,
Sex = "男" }); return itemSource;
}
}
}
数据对象
首先我模拟一个验证方法,当输入的 Name 为 kk 时,即出现排他错误:
// 数据验证
private bool Verify(int rowIndex)
{
bool flag = false;
DataObject selectedItem = (DataObject)flx.SelectedItem;
flag = (selectedItem != null && selectedItem.Name.Equals("kk")); return flag;
}
然后在行编辑完成时(RowEditEnding),进行判断处理排他错误信息:
private void flx_RowEditEnding(object sender, C1.WPF.FlexGrid.CellEditEventArgs e)
{
C1FlexGrid flexGrid = sender as C1FlexGrid;
// 满足某些条件时出现验证错误
if (Verify(e.Row))
{
((DataObject)flexGrid.SelectedItem).UpdateErrorMessage = "Error!!";
// 重绘当前行
flexGrid.Invalidate(new CellRange(e.Row, -1, e.Row, flexGrid.Columns.Count - 1));
// 重绘该行行头部分,已显示小红点提示
flexGrid.RowHeaders.Invalidate();
e.Cancel = true;
}
else
{
((DataObject)flexGrid.SelectedItem).UpdateErrorMessage = "";
}
}
其中
flexGrid.Invalidate(new CellRange(e.Row, -1, e.Row, flexGrid.Columns.Count - 1));
是为了重新绘制当前行,否则当设置完排他错误 UpdateErrorMessage 时,只会绘制当前单元格的红色边框,该行其他的单元格不会绘制;
其中
flexGrid.RowHeaders.Invalidate();
是为了绘制行头的那个红色点;
下面才是解决问题的关键:
其实也很简单,就是将最后自定义列重新绘制一遍即可:
public class MyCellFactory : CellFactory
{
public override void CreateCellContent(C1FlexGrid grid, Border bdr, CellRange rng)
{
base.CreateCellContent(grid, bdr, rng);
// 处理最后一列非绑定列的边框重绘
if (rng.Column == grid.Columns.Count - 1)
{
bdr.BorderThickness = new Thickness(0, 0, 1, 1);
bdr.BorderBrush = new SolidColorBrush(Color.FromArgb(255, 240, 240, 240));
bdr.UpdateDefaultStyle();
}
}
}
其中 base.CreateCellContent(grid, bdr, rng); 里面就已经将单元格的排他错误样式绘制完了,所以一定要在这之后再手动绘制自定义列,参考上面的代码;
最后实现的效果如下:

[C1] C1FlexGrid 排除非绑定列的验证效果的更多相关文章
- GridView 动态添加绑定列和模板列
动态添加绑定列很简单:例如: GridView1.DataSourceID = "SqlDataSource1"; BoundField bf1 = new BoundField( ...
- Silverlight C1.Silverlight.FlexGrid 表格动态列
很多时候,我们对于表格展示的数据,需要根据条件不停的变化,这就需要表格列能动态生成,即没有Model的概念(万物始于无形).先上主要代码: 一.根据参数绑定列定义 二.根据数据动态创建数据对象,并添加 ...
- DEV XtraGrid绑定非绑定列(转)
在Gridview创建一列 .将该列的UnboundType属性设置为bound(默认值)以外的数据类型 为该列设置一个窗体内全局唯一的FieldName,注意这个FieldName甚至不能出现在 ...
- 在php中使用对称加密DES3,开发银行卡绑定,实名验证……
对称加密:对称加密是一种数据加密算法,对一组数据的加密和解密都使用一样的密钥(key),可以有效保护金融数据,常见的对称加密有DES,3DES,AES.RC2.RC4.RC5. DES3: 对DES算 ...
- WPF DATAGrid 空白列 后台绑定列 处理
原文:WPF DATAGrid 空白列 后台绑定列 处理 AutoGenerateColumns <DataGrid x:Name="dataGrid" Margin=&qu ...
- 管理员技术(五): 配置文档的访问权限、 配置附加权限、绑定到LDAP验证服务、配置LDAP家目录漫游
一.配置文档的访问权限 问题: 本例要求将文件 /etc/fstab 拷贝为 /var/tmp/fstab,并调整文件 /var/tmp/fstab的权限,满足以下要求: 1> 此文件的拥有者 ...
- 【bootstrapValidator 不验证】使用bootstrapValidator 验证效果不起作用
虽然在页面ready的时候 就绑定了验证表单 ,但是在点击提交按钮之后 依旧没有验证的效果 . 那就在提交按钮的点击事件中 添加一句话: $(document).ready( function () ...
- Jquery绑定事件及动画效果
Jquery绑定事件及动画效果 本文转载于:https://blog.csdn.net/Day_and_Night_2017/article/details/85799522 绑定事件 bind(ty ...
- [C1] C1FlexGrid 行列增删&单元格合并拆分
上一篇中实现了 C1FlexGrid的撤销还原功能,这篇是要仿 Excel 做一个行列删除以及单元格的自由合并拆分,楼主怕在原工程里复杂的说不清道不明,所以干脆提取出来做了一个 Demo 来说明实现过 ...
随机推荐
- Linux常用命令操作
系统信息 arch 显示机器的处理器架构(1) uname -m 显示机器的处理器架构(2) uname -r 显示正在使用的内核版本 dmidecode -q 显示硬件系统部件 - (SMBIOS ...
- iOS开发 适配iOS10
2016年9月7日,苹果发布iOS 10.2016年9月14日,全新的操作系统iOS 10将正式上线. 作为开发者,如何适配iOS10呢? 1.Notification(通知) 自从Notificat ...
- Zabbix 漏洞分析
之前看到Zabbix 出现SQL注入漏洞,自己来尝试分析. PS:我没找到3.0.3版本的 Zabbix ,暂用的是zabbix 2.2.0版本,如果有问题,请大牛指点. 0x00 Zabbix简介 ...
- DBobjectsCompareScript(数据库对象比较).sql
use master goIF EXISTS (SELECT * FROM sysobjects WHERE id = OBJECT_ID(N'[func_CompareDBobjectsReColu ...
- 浅谈SQL注入风险 - 一个Login拿下Server
前两天,带着学生们学习了简单的ASP.NET MVC,通过ADO.NET方式连接数据库,实现增删改查. 可能有一部分学生提前预习过,在我写登录SQL的时候,他们鄙视我说:“老师你这SQL有注入,随便都 ...
- Hacker Rank: Two Strings - thinking in C# 15+ ways
March 18, 2016 Problem statement: https://www.hackerrank.com/challenges/two-strings/submissions/code ...
- 分享一款自己改进的皮肤“verdant”.
- -!我总觉得我不应该这个样子了,这是个不好的习惯,面对博客,我每周或者每个月都会有审美疲劳,然后又写一个皮肤模板,不停的循环,至今都写了好多好多了,都记不清了,汗... 下面是我这今天审美疲劳写的 ...
- JavaScript中undefined与null的区别
通常情况下, 当我们试图访问某个不存在的或者没有赋值的变量时,就会得到一个undefined值.Javascript会自动将声明是没有进行初始化的变量设为undifined. 如果一个变量根本不存在会 ...
- [PHP源码阅读]array_pop和array_shift函数
上篇文章介绍了PHP添加元素到数组的函数,那么当然有从数组中删除元素.array_pop和array_shift只从数组的头或尾删除一个元素.经过阅读源码,发现这两个函数的实现都是调用了同一个函数-- ...
- 前端构建大法 Gulp 系列 (一):为什么需要前端构建
系列目录 前端构建大法 Gulp 系列 (一):为什么需要前端构建 前端构建大法 Gulp 系列 (二):为什么选择gulp 前端构建大法 Gulp 系列 (三):gulp的4个API 让你成为gul ...