使用观察者模式实时更新程序打开多个界面绑定组件的数据源
使用观察者模式实时更新程序打开多个界面绑定组件的数据源
使用观察者模式(Observer Pattern),实时更新当前程序打开多个界面的绑定组件的数据源。 实例截图参考: 观察者接口设计: C# Code: public interface IObserver { string Name { get; } void Notify(); } C# Code: /// <summary> /// 产品成本明细表的成本项目Lookup组件观察者 /// </summary> public class ProductCostParamObserver : IObserver { protected string _TableName = ""; protected object _ObservedData; private RepositoryItemLookUpEdit _LookUpEdit; private bool _ReloadDataSource = false;//调用通知事件时是否重新加载数据源 public ProductCostParamObserver(string tableName, RepositoryItemLookUpEdit lookupEdit, bool reloadDataSource = false) { _TableName = tableName; _LookUpEdit = lookupEdit; _ReloadDataSource = reloadDataSource; this.Notify(); } public string Name { get { return _TableName; } } public virtual void Notify() { if (_ReloadDataSource) DataDictCache.Cache.RemoveCache(_TableName); //绑定组件的数据源 DataBinderTools.BoundProductCostParam(_LookUpEdit); } } //来源:C/S框架网(www.csframework.com) QQ:23404761 观察者实例2: C# Code: /// <summary> /// 产品类别下拉选择组件观察者 /// </summary> public class ProductCategoryObserver : IObserver { protected string _TableName = ""; protected object _ObservedData; private TreeListLookUpEdit _LookUpEdit; private ImageList _ImageList; private bool _ReloadDataSource = false;//调用通知事件时是否重新加载数据源 public ProductCategoryObserver(string tableName, TreeListLookUpEdit lookupEdit, ImageList imageList, bool reloadDataSource = false) { _ReloadDataSource = reloadDataSource; _TableName = tableName; _LookUpEdit = lookupEdit; _ImageList = imageList; this.Notify(); } public string Name { get { return _TableName; } } public virtual void Notify() { if (_ReloadDataSource) DataDictCache.Cache.RemoveCache(_TableName); //绑定组件的数据源 DataBinderTools.BoundProductCategory(_LookUpEdit, _ImageList); } } //来源:C/S框架网(www.csframework.com) QQ:23404761 观察者队列全局管理器: 应用场景界面,如《产品成本管理》界面,必须逐个添加观察者到全局管理器,当用户添加、删除或更新基础资料,实时通知相关观察者同步作业。 C# Code: /// <summary> /// 观察者队列全局管理器 /// </summary> public class DataDictObservers { private static List<IObserver> _Observers = new List<IObserver>(); /// <summary> /// 增加观察者到队列 /// </summary> /// <param name="observer">观察者</param> public static void Add(IObserver observer) { _Observers.Add(observer); } /// <summary> /// 通知观察者 /// </summary> /// <param name="observerName">观察者名称</param> public static void Notify(string observerName) { foreach (IObserver o in _Observers) { if (o.Name == observerName) o.Notify(); } } } //来源:C/S框架网(www.csframework.com) QQ:23404761 C# Code: /// <summary> ///提交数据成功后,即时进行其它数据操作。 /// </summary> /// <param name="dataTable"></param> protected virtual void DoAfterSave(DataTable dataTable) { //同步更新缓存数据 DataDictCache.Cache.SyncAddOrUpdateCache(dataTable.Rows[0], _UpdateType, _BLL.SummaryTableName, _BLL.KeyFieldName); //通知观察者列表 DataDictObservers.Notify(dataTable.TableName); } //来源:C/S框架网(www.csframework.com) QQ:23404761 DoAfterSave源码,参考frmBaseDataDictionary.cs 代码。 通知观察者(DataDictObservers.Notify)有以下几种方式: 1. 保存数据字典后即时调用,用户体验较好。 2. 手工点击主窗体下面的任务栏【刷新缓存】按钮。 应用场景:如《产品成本管理》界面 C# Code: //已注释:观察者模式替代 //DataBinderTools.BoundProductCategory(txt_Category, imageList1); //DataBinderTools.BoundProductCategory(txtCategory, imageList1); //DataBinderTools.BoundProductCostParam(repParam); //采用观察者模式,实时更新当前程序打开多个界面的绑定组件的数据源 DataDictObservers.Add(new ProductCategoryObserver(dt_ProductCategory.__TableName, txtCategory, imageList1)); DataDictObservers.Add(new ProductCategoryObserver(dt_ProductCategory.__TableName, txt_Category, imageList1)); DataDictObservers.Add(new ProductCostParamObserver(dt_CostProductParams.__TableName, repParam)); //来源:C/S框架网(www.csframework.com) QQ:23404761 相关文章: 开发应用-观察者模式之C#实现缓存数据更新
参考文档:
开发应用-观察者模式之C#实现缓存数据更新 C#多线程处理多个队列的数据(交叉线程访问及Invoke方法使用) 框架能否支持同时访问多个数据源? C/S框架网示例程序数据库下载(不断更新) 如运行程序时加载数据库报错:已存在同名的数据库,或无法打开UNC目录 C# 使用设计模式构建通用数据库访问类 使用[后台数据更新模型]保存主从表数据(C#源码) C#使用DataBindings属性绑定不同类型的数据源 C#.NET 监视操作系统打开程序(使用Window消息实现全局系统勾子) C#.Net组件开发 - 使用Attach to Process实时调试设计器代码 取LookupEdit组件数据源当前资料行某字段的值 DEV组件LookupEdit,ComboBoxEdit绑定数据源 DEV CheckedListBoxControl组件绑定数据源 C# 给绑定数据源的文本框.Text属性赋值,但没有保存数据 使用DataBinderTools工具类绑定下拉LookupEdit组件数据源
其它资料:
什么是C/S结构? | C/S框架核心组成部分 | C/S框架-WebService部署图 | C/S框架-权限管理 | C/S结构系统框架 - 5.1旗舰版介绍 | C/S结构系统框架 - 功能介绍 | C/S结构系统框架 - 产品列表 | C/S结构系统框架 - 应用展示(图) | 三层体系架构详解 | C/S架构轻量级快速开发框架 | C/S框架网客户案例 | WebApi快速开发框架 | C/S框架代码生成器 | 用户授权注册软件系统 | 版本自动升级软件 | 数据库底层应用框架 | CSFramework.CMS内容管理系统 | |