新增功能:保存前本地缓存数据,资料暂存解决方案 - Winform开发框架
新增功能:保存前本地缓存数据,资料暂存解决方案 - Winform开发框架
缓存数据|资料暂存
CSFrameworkV5.1旗舰版新增一个重磅功能,我们在保存数据前,需要支持本地缓存,实现资料暂存功能。C/S框架企业版V4、旗舰版V5用户可根据本文提供的解决方案自行升级,若有不明白的地方请联系作者。
解决方案:
1. 界面扩展两个按钮
本文实例在采购订单frmPO窗体扩展了两个按钮,分别是【暂存数据】,【加载暂存】

重写InitButtons方法,扩展两个按钮。
C# Code:
public override void InitButtons()
{
//
//省略代码....
//
if (this.ButtonAuthorized(ButtonAuthority.EX_02))
{
//【暂存数据】按钮
IButtonInfo btnSaveLocal = this.ToolbarRegister.CreateButton("btnSaveLocal", "暂存数据", ToolBarGroup.扩展功能1,
Globals.LoadBitmap("32_SaveCache.png"), new Size(57, 28), true, true, this.DoSaveLocal);
_buttons.AddButton(btnSaveLocal);
//【加载暂存】按钮
IButtonInfo btnLoadLocal = this.ToolbarRegister.CreateButton("btnLoadLocal", "加载暂存", ToolBarGroup.扩展功能1,
Globals.LoadBitmap("32_LoadCache.png"), new Size(57, 28), true, true, this.DoLoadLocal);
_buttons.AddButton(btnLoadLocal);
}
}
//来源:C/S框架网 | www.csframework.com | QQ:23404761
{
//
//省略代码....
//
if (this.ButtonAuthorized(ButtonAuthority.EX_02))
{
//【暂存数据】按钮
IButtonInfo btnSaveLocal = this.ToolbarRegister.CreateButton("btnSaveLocal", "暂存数据", ToolBarGroup.扩展功能1,
Globals.LoadBitmap("32_SaveCache.png"), new Size(57, 28), true, true, this.DoSaveLocal);
_buttons.AddButton(btnSaveLocal);
//【加载暂存】按钮
IButtonInfo btnLoadLocal = this.ToolbarRegister.CreateButton("btnLoadLocal", "加载暂存", ToolBarGroup.扩展功能1,
Globals.LoadBitmap("32_LoadCache.png"), new Size(57, 28), true, true, this.DoLoadLocal);
_buttons.AddButton(btnLoadLocal);
}
}
//来源:C/S框架网 | www.csframework.com | QQ:23404761
2. 两个扩展按钮的Click事件
【暂存数据】按钮的Click事件
C# Code:
/// <summary>
/// 暂存数据
/// </summary>
/// <param name="sender"></param>
public void DoSaveLocal(IButtonInfo sender)
{
//表格没记录
if (gvSummary.FocusedRowHandle < 0) return;
//自动进入查看模式
if (tcBusiness.SelectedTabPage == tpSummary) this.DoViewContent(sender);
var ds = _BLLInstance.CurrentBusiness;
if (ds == null || ds.Tables.Count == 0)
throw new CustomException("没有数据需要暂存!");
//暂存资料
if (Msg.AskQuestion("确定要暂存资料吗?"))
{
bool ok = DocCacheLocal.SaveCache(_BLLInstance.CurrentBusiness, "PO");
if (ok) Msg.ShowInformation("暂存资料成功!");
}
}
//来源:C/S框架网 | www.csframework.com | QQ:23404761
/// 暂存数据
/// </summary>
/// <param name="sender"></param>
public void DoSaveLocal(IButtonInfo sender)
{
//表格没记录
if (gvSummary.FocusedRowHandle < 0) return;
//自动进入查看模式
if (tcBusiness.SelectedTabPage == tpSummary) this.DoViewContent(sender);
var ds = _BLLInstance.CurrentBusiness;
if (ds == null || ds.Tables.Count == 0)
throw new CustomException("没有数据需要暂存!");
//暂存资料
if (Msg.AskQuestion("确定要暂存资料吗?"))
{
bool ok = DocCacheLocal.SaveCache(_BLLInstance.CurrentBusiness, "PO");
if (ok) Msg.ShowInformation("暂存资料成功!");
}
}
//来源:C/S框架网 | www.csframework.com | QQ:23404761
【加载暂存】按钮的Click事件
C# Code:
/// <summary>
/// 加载暂存文件
/// </summary>
/// <param name="sender"></param>
public void DoLoadLocal(IButtonInfo sender)
{
//新增或修改模式下加载暂存资料,要提示用户!
if (this.IsAddOrEditMode)
{
if (!Msg.AskQuestion("您当前操作的资料没有保存,加载暂存会覆盖数据,确定要操作吗?")) return;
}
//打开暂存文件选择窗体
DocCacheItem item = frmDocCachePicker.Execute("PO");
if (item != null)
{
//没有初始化DataSet,先要初始化
if (_BLLInstance.CurrentBusiness == null)
_BLLInstance.GetDataByKey("-", true);
else
_BLLInstance.CurrentBusiness = item.DS;//重置(替换)DataSet对象
DataTable summary = _BLL.CurrentBusiness.Tables[_BLL.SummaryTableName];//取主表
DoBindingSummaryEditor(summary); //绑定主表的数据源
this.DoBindingDetailGrid(_BLL.CurrentBusiness);//绑定明细表数据源
//根据记录状态设置窗体操作模式
_UpdateType = UpdateType.None;//默认设置为查看状态
if (_BLLInstance.BusinessTables[0].Rows[0].RowState == DataRowState.Added)
_UpdateType = UpdateType.Add;
if (_BLLInstance.BusinessTables[0].Rows[0].RowState == DataRowState.Modified)
_UpdateType = UpdateType.Modify;
if (this.IsAddOrEditMode)
this.SetEditMode();//设置按钮状态-新增/修改模式
else
this.SetViewMode();//设置按钮状态-查看模式
this.ButtonStateChanged(_UpdateType);//通知窗体,按钮状态改变
this.ShowDetailPage(false); //用户点击ViewContent按钮可以显示Summary页
}
else
{
//Msg.Warning("没有暂存资料!");
}
}
//来源:C/S框架网 | www.csframework.com | QQ:23404761
/// 加载暂存文件
/// </summary>
/// <param name="sender"></param>
public void DoLoadLocal(IButtonInfo sender)
{
//新增或修改模式下加载暂存资料,要提示用户!
if (this.IsAddOrEditMode)
{
if (!Msg.AskQuestion("您当前操作的资料没有保存,加载暂存会覆盖数据,确定要操作吗?")) return;
}
//打开暂存文件选择窗体
DocCacheItem item = frmDocCachePicker.Execute("PO");
if (item != null)
{
//没有初始化DataSet,先要初始化
if (_BLLInstance.CurrentBusiness == null)
_BLLInstance.GetDataByKey("-", true);
else
_BLLInstance.CurrentBusiness = item.DS;//重置(替换)DataSet对象
DataTable summary = _BLL.CurrentBusiness.Tables[_BLL.SummaryTableName];//取主表
DoBindingSummaryEditor(summary); //绑定主表的数据源
this.DoBindingDetailGrid(_BLL.CurrentBusiness);//绑定明细表数据源
//根据记录状态设置窗体操作模式
_UpdateType = UpdateType.None;//默认设置为查看状态
if (_BLLInstance.BusinessTables[0].Rows[0].RowState == DataRowState.Added)
_UpdateType = UpdateType.Add;
if (_BLLInstance.BusinessTables[0].Rows[0].RowState == DataRowState.Modified)
_UpdateType = UpdateType.Modify;
if (this.IsAddOrEditMode)
this.SetEditMode();//设置按钮状态-新增/修改模式
else
this.SetViewMode();//设置按钮状态-查看模式
this.ButtonStateChanged(_UpdateType);//通知窗体,按钮状态改变
this.ShowDetailPage(false); //用户点击ViewContent按钮可以显示Summary页
}
else
{
//Msg.Warning("没有暂存资料!");
}
}
//来源:C/S框架网 | www.csframework.com | QQ:23404761
选择暂存文件窗体:

3. 修改bllBaseBusiness.CurrentBusiness属性
bllBaseBusiness类,CurrentBusiness属性改为get;set;
C# Code:
/// <summary>
/// 当前正在处理的业务数据
/// </summary>
public DataSet CurrentBusiness { get { return _CurrentBusiness; } set { _CurrentBusiness = value; } }
//来源:C/S框架网 | www.csframework.com | QQ:23404761
/// 当前正在处理的业务数据
/// </summary>
public DataSet CurrentBusiness { get { return _CurrentBusiness; } set { _CurrentBusiness = value; } }
//来源:C/S框架网 | www.csframework.com | QQ:23404761
4. 本地缓存文件

文件名格式:【资料类型】-【记录状态】-【暂存时间】.data
文件内容格式:【Base64String(DataSet结构)】+【|分隔符】+【Base64String(DataSet结构)】
5. 两个按钮图标
7. 其他源码文件下载(VIP用户)
frmDocCachePicker窗体代码DocCacheItem类DocCacheLocal类


参考文档:
C/S软件授权注册系统V3.0(Winform+WebApi+.NET8+EFCore版本)|C/S开发框架
C# Winform等待窗体WaitingForm组件下载(CSFramework提供)|C/S开发框架
企业级C/S系统快速开发框架(Winform+.NET8+EFCore)|C/S开发框架
最新MES系统快速开发平台(Winform+NET8+EFCore)|C/S开发框架
Winform软件开发框架|快速开发平台推荐|C/S开发框架
Winform开发框架 | 表格编辑窗体权限控制|C/S开发框架
CSFrameworkV6旗舰版|新增功能|打开模块默认窗体|C/S开发框架
CSFrameworkV6旗舰版新增功能菜单权限设置|C/S开发框架
DevExpress组件版本下载、安装与VS开发环境 | Winform C/S框架|C/S开发框架
WinFormsApp窗体应用快速开发框架(.NET7+EFCore+VS2022)
Winform C/S架构自动升级程序 AutoUpgraderV1.2迭代记录|C/S开发框架
C/S Winform框架开发指南 | 如何新增系统消息参数(sys_SystemSettings表)|C/S开发框架
C/S Winform开发框架 | 单表基础资料窗体实现主从表资料管理|C/S开发框架
PLC,上位机软件快速开发框架(VS2022+C#+Winform)
Winform开发框架 - 使用Linq判断日期时间范围查询条件的方法
CSFrameworkV6 - Winform开发框架 - Delete方法使用
C/S软件授权注册系统V3.0(Winform+WebApi+.NET8+EFCore版本)|C/S开发框架
C# Winform等待窗体WaitingForm组件下载(CSFramework提供)|C/S开发框架
企业级C/S系统快速开发框架(Winform+.NET8+EFCore)|C/S开发框架
最新MES系统快速开发平台(Winform+NET8+EFCore)|C/S开发框架
Winform软件开发框架|快速开发平台推荐|C/S开发框架
Winform开发框架 | 表格编辑窗体权限控制|C/S开发框架
CSFrameworkV6旗舰版|新增功能|打开模块默认窗体|C/S开发框架
CSFrameworkV6旗舰版新增功能菜单权限设置|C/S开发框架
DevExpress组件版本下载、安装与VS开发环境 | Winform C/S框架|C/S开发框架
WinFormsApp窗体应用快速开发框架(.NET7+EFCore+VS2022)
Winform C/S架构自动升级程序 AutoUpgraderV1.2迭代记录|C/S开发框架
C/S Winform框架开发指南 | 如何新增系统消息参数(sys_SystemSettings表)|C/S开发框架
C/S Winform开发框架 | 单表基础资料窗体实现主从表资料管理|C/S开发框架
PLC,上位机软件快速开发框架(VS2022+C#+Winform)
Winform开发框架 - 使用Linq判断日期时间范围查询条件的方法
CSFrameworkV6 - Winform开发框架 - Delete方法使用
其它资料:
什么是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内容管理系统 |
什么是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内容管理系统 |
在线客服

存放到debug\images目录下