DevExpress学习笔记(1)——IDXDataErrorInfo接口
来源:互联网 发布:知网社会与经济数据库 编辑:程序博客网 时间:2024/06/06 02:34
鉴于自己知识面中的欠缺,花了很多时间潜心学习了DevExpress组件。
学习之前以为DevExpress只是控件,熟悉属性、方法、事件即可,后来发现远不是这么回事情,比如IDXDataErrorInfo接口。
一、IDXDataErrorInfo的基础知识
IDXDataErrorInfo接口,用于为业务类的属性提供展示提示信息的方法。其名称空间为:DevExpress.XtraEditors.DXErrorProvider,程序集为:DevExpress.Data.版本号.dll。无父类。
该接口提供了两个方法:
void GetError(ErrorInfo info);
void GetPropertyError(string propertyName, ErrorInfo info);
用得最多的是第二个。
示例代码如下:
#region IDXDataErrorInfo 成员
void DevExpress.XtraEditors.DXErrorProvider.IDXDataErrorInfo.GetError(DevExpress.XtraEditors.DXErrorProvider.ErrorInfo info)
{
return;
}
void DevExpress.XtraEditors.DXErrorProvider.IDXDataErrorInfo.GetPropertyError(string propertyName, DevExpress.XtraEditors.DXErrorProvider.ErrorInfo info)
{
info.ErrorType = DevExpress.XtraEditors.DXErrorProvider.ErrorType.Information;
switch (propertyName)
{
case "Category":
if (Category == null)
info.ErrorText = "请务必选择收支项目。";
break;
case "Amount":
if (Amount == 0)
info.ErrorText = "请录入金额。";
break;
}
}
#endregion
ErrorType,是用于获取或者设置信息展示的图标,有红叉叉、黄色感叹号、蓝色的i,以及多达9个自定义图标。
ErrorText,是用于获取或者设置信息的内容。
二、IDXDataErrorInfo的应用
为什么会对这个接口如此感兴趣呢?是基于如下的原因:
1、可以在业务层中完成数据录入校验,而不用分散在不同的界面层去。
2、实现了该接口的业务类,可以通过和控件的绑定、包括和GridControl控件的绑定,轻松实现录入校验结果的展示。并且这种展示方式改善了我之前常用的而又比较厌恶的方式:
A、在LABEL中,用*号表示必录项,我一向认为不好看,而且即使已录入正确还有此提示;
B、用MessageBox展示错误提示信息,这个我一向认为不太礼貌。
应用一、与Edit控件的绑定。
当业务类实现了该接口后,可以在录入的时候进行控件绑定,即把控件的属性和业务类的属性绑定在一起,同时把一个DXErrorProvider组件与业务类实例进行绑定。
绑定示例代码如下:
txtAmount.DataBindings.Add(new Binding("Text", m_IncExpTransaction, "Amount", true));
cmbCategory.DataBindings.Add(new Binding("EditValue", m_IncExpTransaction, "Category", true));
m_ErrorProvider.DataSource = m_IncExpTransaction;
其中,txtAmount是CalcEdit控件,cmbCategory是LookUpEdit控件,m_ErrorProvider是DxErrorProvider组件,m_IncExpTransaction是业务类实例。
错误提示示例代码如下:
private void btnSave_Click(object sender, EventArgs e)
{
if (m_ErrorProvider.HasErrors)
{
foreach (BaseEdit control in FirstErrorControlList)
{
if (control.ErrorText.Length > 0)
{
control.Focus(); //控件获得焦点
control.SelectAll(); //控件的值处于选中状态
m_ToolTipControler.ShowHint(control.ErrorText, control, DevExpress.Utils.ToolTipLocation.TopCenter); //用hint来显示提示信息
break;
}
}
}
else
{
Save();
this.Close();
}
}
protected virtual BaseEdit[] FirstErrorControlList
{
get
{
return new BaseEdit[] { };
}
}
protected virtual void Save()
{
XtraMessageBox.Show("尚未重写保存方法。");
}
其中,FirstErrorControlList属性用于提供需要检查的控件列表,并按照列表顺序进行控件检查。m_ToolTipControler是ToolTipControler组件。
效果如下:
1、当进入该界面时,会自动在金额和收支项目前显示i,以提示是必填项;鼠标移上去后,显示提示信息。
2、点击保存,而录入项不正确,则主动显示提示信息。
应用二、与GridControl控件的绑定。
这个实际上只是在GridControl的校验事件相关。
示例代码如下:
protected virtual void OnGridValidateRow(object sender, DevExpress.XtraGrid.Views.Base.ValidateRowEventArgs e)
{
for (int i = 0; i < m_View.Columns.Count; i++) //依次检查所有的列是否能校验通过
{
if (m_View.GetColumnError(m_View.Columns[i]).Length > 0)
{
e.Valid = false; //校验失败,激发InvalidRowException事件
break;
}
}
}
备注:GetColumnError的值就是IDXDataErrorInfo中的错误提示,如果没有错误,则为空字符串。
protected virtual void OnGridInvalidRowException(object sender, DevExpress.XtraGrid.Views.Base.InvalidRowExceptionEventArgs e)
{
if (DevExpress.XtraEditors.XtraMessageBox.Show("您是否要修改尚未正确录入的数据?\n\r\n\r点击“否”将取消您的修改,恢复成原来的数据。", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
{
e.ExceptionMode = DevExpress.XtraEditors.Controls.ExceptionMode.NoAction; //不作任何操作
if (m_Form != null)
m_Form.MDIContainer.Focus(); //不切换子窗体
for (int i = 0; i < m_View.Columns.Count; i++)
{
if (m_View.GetColumnError(m_View.Columns[i]).Length > 0)
{
m_View.FocusedColumn = m_View.Columns[i]; //第一个错误列获得焦点
break;
}
}
}
else
e.ExceptionMode = DevExpress.XtraEditors.Controls.ExceptionMode.Ignore; //忽略错误并取消数据改动或者录入
}
效果如下:
- DevExpress学习笔记(1)——IDXDataErrorInfo接口
- DevExpress XPO 学习笔记
- JVAV学习笔记(二)—接口
- DevExpress学习笔记(一)-Ribbon
- DevExpress学习笔记(二)-NavBarControl
- DevExpress学习笔记(三)-XtraGrid
- DevExpress之XtraReport 学习笔记
- DevExpress Persistent Object v.1.5学习笔记(一)
- Delphi的学习笔记十四——接口1
- Delphi的学习笔记十四——接口1
- JNI学习笔记(八)—— 调用接口
- Caffe学习笔记(三)——Matlab接口
- Caffe学习笔记(三)——Matlab接口
- 【Java】学习笔记——接口
- Java学习笔记——接口
- java学习笔记17——接口
- java学习笔记九——接口
- Java学习笔记 —— 16 接口
- 使用WinDBG调试内存泄露的问题
- 大白话解析模拟退火算法
- [開發記錄] 函式庫調用 - GPIO控制 之一
- Web Service学习
- 黑马程序员---正则表达式
- DevExpress学习笔记(1)——IDXDataErrorInfo接口
- winCE中实现虚拟串口的方法
- 遗传算法入门
- Android 网络调试
- EL表达式
- Oracle9或11使用了Oracle10的驱动引起的时间丢失
- LINQ Join & Group Join & Left Join 实现与区别
- OCP-047 USING ORA-25154: USING 子句的列部分不能有限定词
- easyUI 创建Tree和复选框Tree Node