新增功能:保存前本地缓存数据,资料暂存解决方案 - Winform开发框架
作者:作者不详  发布日期:2021/11/10 16:25:18
  新增功能:保存前本地缓存数据,资料暂存解决方案 - 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




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



【加载暂存】按钮的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



选择暂存文件窗体:


贴图图片-本地缓存-加载暂存文件




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



4. 本地缓存文件


贴图图片-本地缓存-文件列表


文件名格式:【资料类型】-【记录状态】-【暂存时间】.data 
文件内容格式:【Base64String(DataSet结构)】+【|分隔符】+【Base64String(DataSet结构)】


5. 两个按钮图标


贴图图片-32_SaveCache   贴图图片-32_LoadCache   存放到debug\images目录下


6. DataSetExtension类



7. 其他源码文件下载(VIP用户)


frmDocCachePicker窗体代码
DocCacheItem类
DocCacheLocal类

贴图图片-本地缓存-文件下载

C/S框架网|原创精神.创造价值.打造精品


扫一扫加作者微信
C/S框架网作者微信 C/S框架网|原创作品.质量保障.竭诚为您服务






点击下载附件 点击下载附件 (如下载失败,请邮件通知我们寄回给您,或QQ:23404761留言.)
上一篇 下一篇