#region using System; using System.Collections; using System.Collections.Generic; using System.Data; using System.Drawing; using System.Windows.Forms; using CSFrameworkV5.Business; using CSFrameworkV5.Common; using CSFrameworkV5.Core; using CSFrameworkV5.Language; using CSFrameworkV5.Library.CommonClass; using DevExpress.XtraGrid.Views.Grid; #endregion namespace CSFrameworkV5.Library { /// /// 数据字典窗体基类 /// public partial class frmBaseDataDictionary : frmBaseDataForm { /// /// 数据字典业务逻辑 /// protected bllBaseDataDict _BLL = new bllNullObjectDataDict(); //临时实例 public frmBaseDataDictionary() { InitializeComponent(); } public override bool ButtonAuthorized(int authorityValue) { //本窗体隐藏指定按钮 //if (authorityValue == ButtonAuthority.PRINT) //数据字典隐藏打印按钮 // return false; return base.ButtonAuthorized(authorityValue); } protected override void ButtonStateChanged(UpdateType currentState) { base.ButtonStateChanged(currentState); SetDetailEditorsAccessable(_DetailGroupControl, DataChanged); //仅新增状态可修改主键输入框 if (_KeyEditor != null) _KeyEditor.Enabled = UpdateType.Add == currentState; } /// /// 新增记录 /// public override void DoAdd(IButtonInfo sender) { try { frmWaitingEx.ShowMe(this); _BLL.CreateDataBinder(null); DoBindingSummaryEditor(_BLL.DataBinder); //绑定数据输入控件 base.DoAdd(sender); ShowDetailPage(true); } finally { frmWaitingEx.HideMe(this); } } protected virtual void DoAfterDelete(string primaryKey) { DataDictCache.Cache.SyncDeleteCacheRow(_BLL.SummaryTableName, _BLL.KeyFieldName, primaryKey); DataDictObservers.Notify(_BLL.SummaryTableName); } /// /// 提交数据成功后处理的扩展方法 /// /// protected virtual void DoAfterSave(DataTable dataTable) { DataDictCache.Cache.SyncAddOrUpdateCache(dataTable.Rows[0], _UpdateType, _BLL.SummaryTableName, _BLL.KeyFieldName); //同步更新缓存数据 DataDictObservers.Notify(dataTable.TableName); } public virtual bool DoBeforeDelete(ref string keyValue) { AssertFocusedRow(); //检查是否选择一条记录 //调用业务逻辑类删除记录 var summary = _SummaryView.GetDataRow(_SummaryView.FocusedRowHandle); keyValue = summary[_BLL.KeyFieldName].ToStringEx(); //主键值 return Msg.AskQuestion("确定要删除主键为 " + keyValue + " 的资料?"); } /// /// 虚方法,用于绑定当前记录的数据到输入框 /// /// 数据源 protected virtual void DoBindingSummaryEditor(DataTable dataBinder) { } public override void DoCancel(IButtonInfo sender) { if (Msg.AskQuestion("要取消修改吗?")) base.DoCancel(sender); } /// /// 删除记录 /// /// public override void DoDelete(IButtonInfo sender) { try { frmWaitingEx.ShowMe(this); var keyValue = ""; if (false == DoBeforeDelete(ref keyValue)) return; var b = _BLL.Delete(keyValue); AssertEqual(b, true, "删除记录时发生错误!"); DeleteSummaryRow(_SummaryView.FocusedRowHandle); //删除Summary资料行 if (_SummaryView.FocusedRowHandle < 0) //删除了最後一条记录. 显示Summary页面. { ShowSummaryPage(true); } else { _BLL.CreateDataBinder( _SummaryView.GetDataRow(_SummaryView.FocusedRowHandle)); DoBindingSummaryEditor(_BLL .DataBinder); //显示主表记录详细资料 } //最后处理自定义方法 DoAfterDelete(keyValue); } finally { frmWaitingEx.HideMe(this); } } public override void DoEdit(IButtonInfo sender) { AssertFocusedRow(); base.DoEdit(sender); DoViewContent(sender); ShowDetailPage(true); } public virtual void DoExportDOC(IButtonInfo sender) { if (_SummaryView != null) { var dlg = new SaveFileDialog(); dlg.Filter = "Microsoft Office File(*.doc)|*.doc"; if (dlg.ShowDialog() == DialogResult.OK) { _SummaryView.ExportData("DOC", dlg.FileName); Msg.ShowInformation("导出文件成功!\r\n" + dlg.FileName); } } } public virtual void DoExportPDF(IButtonInfo sender) { if (_SummaryView != null) { var dlg = new SaveFileDialog(); dlg.Filter = "Adobe Acrobat(*.pdf)|*.pdf"; if (dlg.ShowDialog() == DialogResult.OK) { _SummaryView.ExportData("PDF", dlg.FileName); Msg.ShowInformation("导出文件成功!\r\n" + dlg.FileName); } } } public virtual void DoExportXLS(IButtonInfo sender) { if (_SummaryView != null) { var dlg = new SaveFileDialog(); dlg.Filter = "Microsoft Excel File(*.xls)|*.xls"; if (dlg.ShowDialog() == DialogResult.OK) { _SummaryView.ExportData("XLS", dlg.FileName); Msg.ShowInformation("导出文件成功!\r\n" + dlg.FileName); } } } public virtual void DoRefreshData(IButtonInfo sender) { if (tcBusiness.SelectedTabPage == tpSummary) ShowSummary(); else Msg.Warning("数据编辑页禁止刷新数据!"); } /// /// 标准的保存方法 /// /// public override void DoSave(IButtonInfo sender) { try { frmWaitingEx.ShowMe(this); UpdateLastControl(); //更新最后一个输入控件的数据 if (!ValidatingData()) return; //检查输入完整性 var ret = _BLL.Update(); //调用业务逻辑层的Update方法提交数据 if (ret) { DoAfterSave(_BLL.DataBinder); //只有修改状态生成日志 //if (_UpdateType == UpdateType.Modify) _BLL.WriteLog(original, _BLL.DataBinder); //保存修改日志 var key = ConvertEx.ToString( _BLL.DataBinder.Rows[0][_BLL.KeyFieldName]); var dt = _BLL.GetDataByKey(key); //保存后查询数据 if (dt.Rows.Count > 0) { UpdateSummaryRow( dt.Rows[ 0]); //刷新表格内的数据. DoSave_ResetState(); } else { Msg.Warning( "当前记录已被其它用户删除,刷新数据失败!\r\n程序:frmBaseDataDictionary.DoSave()"); } } else { Msg.Warning("保存失败!"); } } finally { frmWaitingEx.HideMe(this); } } /// /// 扩展后的保存方法 /// /// public virtual void DoSaveEx(IButtonInfo sender) { try { frmWaitingEx.ShowMe(this); UpdateLastControl(); //更新最后一个输入控件的数据 if (!ValidatingData()) return; //检查输入完整性 var ret = _BLL.UpdateEx(); //调用业务逻辑层的Update方法提交数据 if (ret.Success) { DoAfterSave(_BLL.DataBinder); var dt = _BLL.GetDataByKey(ret.PrimaryKey); //保存后查询数据 if (dt.Rows.Count > 0) { DoBindingSummaryEditor(dt); //生产绑定数据源 UpdateSummaryRow( dt.Rows[ 0]); //刷新表格内的数据. DoSave_ResetState(); } else { Msg.Warning( "当前记录已被其它用户删除,刷新数据失败!\r\n程序:frmBaseDataDictionary.DoSave()"); } } else { Msg.Warning("保存失败!"); } } finally { frmWaitingEx.HideMe(this); } } /// /// 查看单据的修改历史记录 /// /// public virtual void DoShowModifyHistory(IButtonInfo button) { AssertFocusedRow(); var form = MdiTools.OpenChildForm(MdiParent as IMdiForm, typeof(frmLogEditHistory), false); if (form != null) { var keyValue = ""; if (tcBusiness.SelectedTabPageIndex == 0) //数据查看 keyValue = _SummaryView.GetDataRow(_SummaryView.FocusedRowHandle)[ _BLL.KeyFieldName].ToStringEx(); else //数据编辑 keyValue = _BLL.DataBinder != null ? _BLL.DataBinderRow[_BLL.KeyFieldName].ToStringEx() : ""; (form as frmLogEditHistory).ShowData(_BLL.SummaryTableName, keyValue, DateTime.Today); } } /// /// 用户在Summary页选择一条记录. 显示当前记录的详细资料 /// /// public override void DoViewContent(IButtonInfo sender) { AssertFocusedRow(); //检查有无记录. try { frmWaitingEx.ShowMe(this); _BLL.CreateDataBinder( _SummaryView.GetDataRow(_SummaryView.FocusedRowHandle)); base.DoViewContent(sender); DoBindingSummaryEditor(_BLL.DataBinder); //绑定数据输入控件 ShowDetailPage(false); //用户点击ViewContent按钮可以显示Summary页 } finally { frmWaitingEx.HideMe(this); } } public override void InitButtons() { base.InitButtons(); IList list = new ArrayList(); //刷新数据 list.Add(ToolbarRegister.CreateButton("btnRefreshDataDict", LanLib.Get("刷新数据"), ToolBarGroup.数据操作, Globals.LoadBitmap("32_Refresh.png"), new Size(57, 28), true, true, DoRefreshData)); //导出字典 if (ButtonAuthorized(ButtonAuthority.EXPORT)) { //导出字典按钮的3个下拉按钮 var subItems = new List(); subItems.Add(ToolbarRegister.CreateButton("btnExportXLS", LanLib.Get("导出XLS文件"), ToolBarGroup.数据操作, Globals.LoadBitmap("32_ExportXlsLarge.png"), new Size(57, 28), false, true, DoExportXLS)); subItems.Add(ToolbarRegister.CreateButton("btnExportDoc", LanLib.Get("导出DOC文件"), ToolBarGroup.数据操作, Globals.LoadBitmap("32_ExportDocLarge.png"), new Size(57, 28), false, true, DoExportDOC)); subItems.Add(ToolbarRegister.CreateButton("btnExportPDF", LanLib.Get("导出PDF文件"), ToolBarGroup.数据操作, Globals.LoadBitmap("32_ExportPdfLarge.png"), new Size(57, 28), false, true, DoExportPDF)); list.Add(ToolbarRegister.CreateListButton("btnExportDataDict", LanLib.Get("导出字典"), ToolBarGroup.数据操作, Globals.LoadBitmap("32_Export.png"), new Size(57, 28), true, true, null, subItems)); } //查看日志 if (ButtonAuthorized(ButtonAuthority.SHOW_MOD_HISTORY)) list.Add(ToolbarRegister.CreateButton("btnShowModifyHistory", LanLib.Get("查看日志"), ToolBarGroup.扩展功能1, Globals.LoadBitmap("32_EditLog.png"), new Size(57, 28), true, true, DoShowModifyHistory)); _buttons.AddRange(list); } /// /// 初始化操作 /// protected override void InitializeForm() { if (_SummaryView != null && _SummaryView.View is GridView) { var gridView = _SummaryView.View as GridView; frmGridCustomize.RegisterGrid(gridView); //注册表格配置功能 DevStyle.SetGridControlLayout(gridView.GridControl, false); //设置表格样式 DevStyle.SetSummaryGridViewLayout(gridView); BindingSummaryNavigator(controlNavigatorSummary, gridView.GridControl); //Summary导航条. } _SummaryView.BindingDoubleClick( OnGridViewDoubleClick); //主表DoubleClict ShowSummary(); //下载显示数据. ShowSummaryPage(true); //一切初始化完毕後显示SummaryPage base.InitializeForm(); } protected override void SetEditMode() { base.SetEditMode(); _buttons.GetButtonByName("btnRefreshDataDict").Enable = false; _buttons.GetButtonByName("btnExportDataDict").Enable = false; _buttons.GetButtonByName("btnShowModifyHistory").Enable = false; } public override void SetLanguage() { base.SetLanguage(); Buttons.GetButtonByName("btnRefreshDataDict").Caption = LanLib.Get("刷新数据"); Buttons.GetButtonByName("btnExportDataDict").Caption = LanLib.Get("导出字典"); Buttons.GetButtonByName("btnExportXLS").Caption = LanLib.Get("导出XLS文件"); Buttons.GetButtonByName("btnExportPDF").Caption = LanLib.Get("导出PDF文件"); } protected override void SetViewMode() { base.SetViewMode(); _buttons.GetButtonByName("btnRefreshDataDict").Enable = true; _buttons.GetButtonByName("btnExportDataDict").Enable = ButtonAuthorized(ButtonAuthority.EXPORT); _buttons.GetButtonByName("btnShowModifyHistory").Enable = ButtonAuthorized(ButtonAuthority.SHOW_MOD_HISTORY); } /// /// 显示数据字典, 一次性全部下载。 /// protected virtual void ShowSummary() { _BLL.GetSummaryData(true); //调用业务逻辑类的GetSummaryData()方法获取数据 DoBindingSummaryGrid(_BLL.SummaryTable); //绑定主表的Grid ShowSummaryPage(true); //显示Summary页面. } /// /// 检查输入完整性 /// /// protected virtual bool ValidatingData() { return true; } } }