[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 来说明实现过 ...
随机推荐
- 从零开始编写自己的C#框架(27)——什么是开发框架
前言 做为一个程序员,在开发的过程中会发现,有框架同无框架,做起事来是完全不同的概念,关系到开发的效率.程序的健壮.性能.团队协作.后续功能维护.扩展......等方方面面的事情.很多朋友在学习搭建自 ...
- js:给定两个数组,如何判断他们的相对应下标的元素类型是一样的
题目: 给Array对象原型上添加一个sameStructureAs方法,该方法接收一个任意类型的参数,要求返回当前数组与传入参数数组(假定是)相对应下标的元素类型是否一致. 假设已经写好了Array ...
- 【开源】.Net Api开放接口文档网站
开源地址:http://git.oschina.net/chejiangyi/ApiView 开源QQ群: .net 开源基础服务 238543768 ApiView .net api的接口文档查看 ...
- [C#] C# 知识回顾 - 学会使用异常
学会使用异常 在 C# 中,程序中在运行时出现的错误,会不断在程序中进行传播,这种机制称为“异常”. 异常通常由错误的代码引发,并由能够更正错误的代码进行 catch. 异常可由 .NET 的 CLR ...
- 编写自己的PHP MVC框架笔记
1.MVC MVC模式(Model-View-Controller)是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model).视图(View)和控制器(Controller). ...
- 安装angular-cli
最近在学习angular2,并尝试用这个框架来做公司的一个新项目. 终于要开始开发了,等了1个多月. 因为第一次用这个新框架做项目,不太熟悉,就找了angular-cli这个脚手架来搭建项目. 安装了 ...
- 敏捷转型历程 - Sprint3 一团糟的演示会
我: Tech Leader 团队:团队成员分布在两个城市,我所在的城市包括我有4个成员,另外一个城市包括SM有7个成员.另外由于我们的BA离职了,我暂代IT 的PO 职位.PM和我在一个城市,但他不 ...
- TFS 2015 敏捷开发实践 – 在Kanban上运行一个Sprint
前言:在 上一篇 TFS2015敏捷开发实践 中,我们给大家介绍了TFS2015中看板的基本使用和功能,这一篇中我们来看一个具体的场景,如何使用看板来运行一个sprint.Sprint是Scrum对迭 ...
- NodeJS使用mysql
1.环境准备 手动添加数据库依赖: 在package.json的dependencies中新增, "mysql" : "latest", { "nam ...
- Python学习基础
1.使用范围: 大数据 .图像处理.web .运维.爬虫.自动化.科学计算 2.准备环境: linux/mac python 3.5.2 ipython vim/sublime/atom 3.列表 3 ...