吉日嘎啦通用权限管理系统解读及重构升华--高度封装的编辑窗体
2010-05-31 23:06
976 查看
吉日嘎拉,一个专注于通用权限管理系统的开发狂热者,在博客园是一个有争议的人物,不过从其文章数量及内容介绍,专注肯定不是浪得虚名,一个人把东西做的专注,也就意味着更多的投入及考虑,可以作为后来者更多的借鉴。
本人获其友情赠送一套源码,用作深入分析及提炼使用,初一接触,整个体系架构还是比较庞大,如下所示。
代码
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
if (keyData == Keys.F5)
{
this.FormOnLoad();
}
if ((!(ActiveControl is Button)) &&
(keyData == Keys.Up || keyData == Keys.Down || keyData == Keys.Enter))
{
if (keyData == Keys.Enter)
{
System.Windows.Forms.SendKeys.Send("{TAB}");
return true;
}
if (keyData == Keys.Down)
{
System.Windows.Forms.SendKeys.Send("{TAB}");
}
else
{
SendKeys.Send("+{Tab}");
}
return true;
}
else
{
return base.ProcessCmdKey(ref msg, keyData);
}
}
最后,我们看看具体的子类窗体,看新增编辑界面需要实现的代码,如下所示,其中大部分是原子级别的操作,逻辑操作已经在基类中实现了哦:
代码
public partial class FrmEditCustomer : BaseUI.BaseEditForm
{
public FrmEditCustomer()
{
InitializeComponent();
}
/// <summary>
/// 实现控件输入检查的函数
/// </summary>
/// <returns></returns>
public override bool CheckInput()
{
bool result = true;
#region 输入验证
if (this.txtName.Text.Length == 0)
{
MessageUtil.ShowTips("宾客名称不能为空");
this.txtName.Focus();
result = false;
}
else if (this.txtIDNumber.Text.Length == 0)
{
MessageUtil.ShowTips("证件号码不能为空");
this.txtIDNumber.Focus();
result = false;
}
#endregion
return result;
}
/// <summary>
/// 编辑或者保存状态下取值函数
/// </summary>
/// <param name="info"></param>
private void SetInfo(CustomerInfo info)
{
info.Address = txtAddress.Text;
info.CompanyName = txtCompany.Text;
info.IDCarType = cmbIDCarType.Text;
info.Name = txtName.Text;
info.Note = txtNote.Text;
info.IDNumber = txtIDNumber.Text;
info.Telephone = txtTelephone.Text;
info.Source = cmbSource.Text;
info.CustomerType = cmbType.Text;
info.Sex = cmbSex.Text;
}
/// <summary>
/// 数据字典加载
/// </summary>
private void InitDictItem()
{
this.cmbSource.Items.Clear();
this.cmbSource.Items.AddRange(DictItemUtil.GetCustomerSource());
this.cmbType.Items.Clear();
this.cmbType.Items.AddRange(DictItemUtil.GetCustomerType());
this.cmbIDCarType.Items.Clear();
this.cmbIDCarType.Items.AddRange(DictItemUtil.GetIDCarType());
}
/// <summary>
/// 数据显示的函数
/// </summary>
public override void DisplayData()
{
//数据字典加载(公用)
InitDictItem();
if (!string.IsNullOrEmpty(ID))
{
//编辑状态下的数据显示
CustomerInfo info = BLLFactory<Customer>.Instance.FindByID(ID);
if (info != null)
{
#region 显示客户信息
txtAddress.Text = info.Address;
txtCompany.Text = info.CompanyName;
txtName.Text = info.Name;
txtNote.Text = info.Note;
txtIDNumber.Text = info.IDNumber;
txtTelephone.Text = info.Telephone;
cmbSource.Text = info.Source;
cmbType.Text = info.CustomerType;
cmbSex.Text = info.Sex;
cmbIDCarType.Text = info.IDCarType;
lblCreateDate.Text = info.RegistrationDate.ToString();
#endregion
}
}
else
{
//新增状态的数据显示
lblCreateDate.Text = DateTime.Now.ToString();
}
}
/// <summary>
/// 新增状态下的数据保存
/// </summary>
/// <returns></returns>
public override bool SaveAddNew()
{
CustomerInfo info = new CustomerInfo();
SetInfo(info);
info.RegistrationDate = DateTime.Now;
bool succeed = BLLFactory<Customer>.Instance.Insert(info);
return succeed;
}
/// <summary>
/// 编辑状态下的数据保存
/// </summary>
/// <returns></returns>
public override bool SaveUpdated()
{
CustomerInfo info = BLLFactory<Customer>.Instance.FindByID(ID);
if (info != null)
{
SetInfo(info);
bool succeed = BLLFactory<Customer>.Instance.Update(info, info.ID.ToString());
return succeed;
}
return false;
}
}
本人获其友情赠送一套源码,用作深入分析及提炼使用,初一接触,整个体系架构还是比较庞大,如下所示。
代码
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
if (keyData == Keys.F5)
{
this.FormOnLoad();
}
if ((!(ActiveControl is Button)) &&
(keyData == Keys.Up || keyData == Keys.Down || keyData == Keys.Enter))
{
if (keyData == Keys.Enter)
{
System.Windows.Forms.SendKeys.Send("{TAB}");
return true;
}
if (keyData == Keys.Down)
{
System.Windows.Forms.SendKeys.Send("{TAB}");
}
else
{
SendKeys.Send("+{Tab}");
}
return true;
}
else
{
return base.ProcessCmdKey(ref msg, keyData);
}
}
最后,我们看看具体的子类窗体,看新增编辑界面需要实现的代码,如下所示,其中大部分是原子级别的操作,逻辑操作已经在基类中实现了哦:
代码
public partial class FrmEditCustomer : BaseUI.BaseEditForm
{
public FrmEditCustomer()
{
InitializeComponent();
}
/// <summary>
/// 实现控件输入检查的函数
/// </summary>
/// <returns></returns>
public override bool CheckInput()
{
bool result = true;
#region 输入验证
if (this.txtName.Text.Length == 0)
{
MessageUtil.ShowTips("宾客名称不能为空");
this.txtName.Focus();
result = false;
}
else if (this.txtIDNumber.Text.Length == 0)
{
MessageUtil.ShowTips("证件号码不能为空");
this.txtIDNumber.Focus();
result = false;
}
#endregion
return result;
}
/// <summary>
/// 编辑或者保存状态下取值函数
/// </summary>
/// <param name="info"></param>
private void SetInfo(CustomerInfo info)
{
info.Address = txtAddress.Text;
info.CompanyName = txtCompany.Text;
info.IDCarType = cmbIDCarType.Text;
info.Name = txtName.Text;
info.Note = txtNote.Text;
info.IDNumber = txtIDNumber.Text;
info.Telephone = txtTelephone.Text;
info.Source = cmbSource.Text;
info.CustomerType = cmbType.Text;
info.Sex = cmbSex.Text;
}
/// <summary>
/// 数据字典加载
/// </summary>
private void InitDictItem()
{
this.cmbSource.Items.Clear();
this.cmbSource.Items.AddRange(DictItemUtil.GetCustomerSource());
this.cmbType.Items.Clear();
this.cmbType.Items.AddRange(DictItemUtil.GetCustomerType());
this.cmbIDCarType.Items.Clear();
this.cmbIDCarType.Items.AddRange(DictItemUtil.GetIDCarType());
}
/// <summary>
/// 数据显示的函数
/// </summary>
public override void DisplayData()
{
//数据字典加载(公用)
InitDictItem();
if (!string.IsNullOrEmpty(ID))
{
//编辑状态下的数据显示
CustomerInfo info = BLLFactory<Customer>.Instance.FindByID(ID);
if (info != null)
{
#region 显示客户信息
txtAddress.Text = info.Address;
txtCompany.Text = info.CompanyName;
txtName.Text = info.Name;
txtNote.Text = info.Note;
txtIDNumber.Text = info.IDNumber;
txtTelephone.Text = info.Telephone;
cmbSource.Text = info.Source;
cmbType.Text = info.CustomerType;
cmbSex.Text = info.Sex;
cmbIDCarType.Text = info.IDCarType;
lblCreateDate.Text = info.RegistrationDate.ToString();
#endregion
}
}
else
{
//新增状态的数据显示
lblCreateDate.Text = DateTime.Now.ToString();
}
}
/// <summary>
/// 新增状态下的数据保存
/// </summary>
/// <returns></returns>
public override bool SaveAddNew()
{
CustomerInfo info = new CustomerInfo();
SetInfo(info);
info.RegistrationDate = DateTime.Now;
bool succeed = BLLFactory<Customer>.Instance.Insert(info);
return succeed;
}
/// <summary>
/// 编辑状态下的数据保存
/// </summary>
/// <returns></returns>
public override bool SaveUpdated()
{
CustomerInfo info = BLLFactory<Customer>.Instance.FindByID(ID);
if (info != null)
{
SetInfo(info);
bool succeed = BLLFactory<Customer>.Instance.Update(info, info.ID.ToString());
return succeed;
}
return false;
}
}
相关文章推荐
- 一起打造.NET职业生涯奇迹 中国十大快递公司之一的核心业务系统采用.NET通用权限管理系统组件架构重构[重磅博客园独有福利]
- 一起打造.NET职业生涯奇迹 中国十大快递公司之一的核心业务系统采用.NET通用权限管理系统组件架构重构[重磅博客园独有福利]
- 通用数据权限管理系统设计
- 通用数据权限管理系统设计
- 【通用权限管理】角色的分类管理,角色-用户组-职位职务-系统角色的设计上的迷惑也解开
- 通用权限管理系统组件 (GPM - General Permissions Manager) 中实现大数据的高效分页显示
- Vue + Element UI 实现权限管理系统 前端篇(七):功能组件封装
- 通用数据权限管理系统设计
- 通用权限管理系统组件 (GPM - General Permissions Manager) 自己动手只能写一个轻量级的权限系统了功能也不强大,这不是白白流血流汗吗?
- 使用通用权限管理系统组件的随想 - 提高开发能力、规范开发、快速见效
- 清理吉日嘎拉走火入魔C#.NET通用权限管理系统组件表数据的脚本方法参考
- ABP+AdminLTE+Bootstrap Table权限管理系统第六节--abp控制器扩展及json封装以及6种处理时间格式化的方法
- 通用数据权限管理系统设计(一)
- 通用权限管理系统(FrameWork) 1.0.0 Release 发布
- C#.NET中的 sender Tag 功能在支持多语言的通用权限管理系统组件中的实际应用范例
- 通用数据权限管理系统设计
- 通用权限管理系统组件 (GPM - General Permissions Manager) 中集成多个子系统的单点登录(网站入口方式)附源码
- 通用权限管理系统组件 (GPM - General Permissions Manager) - 错误报告
- 通用权限管理系统底层的软删除数据的处理方法介绍
- Java通用权限系统管理(Spring+springMVC+ibatis+Angularjs)