/// <summary> /// 创建可编辑的卡片网格编辑控件。 /// </summary> /// <param name="xtraGrid"></param> /// <param name="dataSource"></param> /// <param name="buiObj"></param> /// <param name="editCols"></param> /// <returns></returns> public bool CreateCardEdit(MB.XWinLib.XtraGrid.GridControlEx xtraGrid, object dataSource, MB.WinBase.IFace.IClientRule buiObj, Dictionary <string, MB.WinBase.Common.ColumnEditCfgInfo> editCols) { string viewTypeName = xtraGrid.MainView.GetType().Name; if (viewTypeName != "CardView") { xtraGrid.MainView = new DevExpress.XtraGrid.Views.Card.CardView(); } editCardGrid(xtraGrid, dataSource, buiObj, editCols); return(true); }
/// <summary> ///加载需要导入的数据。/ /// </summary> /// <param name="parent"></param> /// <param name="buiObj"></param> /// <param name="xmlFileName"></param> /// <param name="importFile"></param> /// <returns></returns> public DataSet LoadImportData(IWin32Window parent, MB.WinBase.IFace.IClientRule buiObj, string xmlFileName, string importFile) { try { MB.WinBase.IFace.IForm iForm = parent as MB.WinBase.IFace.IForm; if (iForm != null) { _ClientRuleObject = iForm.ClientRuleObject; } var colPropertys = MB.WinBase.LayoutXmlConfigHelper.Instance.GetColumnPropertys(xmlFileName); var editCols = MB.WinBase.LayoutXmlConfigHelper.Instance.GetColumnEdits(colPropertys, xmlFileName); DataSet dsData = createNULLDataByFieldPropertys(colPropertys); if (importFile.EndsWith(".txt")) { MB.WinEIDrive.Import.TxtImport txtImport = new MB.WinEIDrive.Import.TxtImport(dsData, importFile); ImportEngine helper = new ImportEngine(editCols, grdCtlMain, txtImport); helper.Commit(); } else { if (ExistsRegedit() > 0) { MB.WinEIDrive.Import.OfficeXlsImport xlsImport = new WinEIDrive.Import.OfficeXlsImport(dsData, importFile); ImportEngine helper = new ImportEngine(editCols, grdCtlMain, xlsImport); helper.Commit(); } else { MB.WinEIDrive.Import.XlsImport xlsImport = new MB.WinEIDrive.Import.XlsImport(dsData, importFile); ImportEngine helper = new ImportEngine(editCols, grdCtlMain, xlsImport); helper.Commit(); } } //移除空行数据 MB.Util.DataValidated.Instance.RemoveNULLRowData(dsData); _ColPropertys = colPropertys; _EditCols = editCols; _CurrentImportData = dsData; _XmlFileName = xmlFileName; return(_CurrentImportData); } catch (MB.Util.APPException aEx) { throw aEx; } catch (Exception ex) { throw new MB.Util.APPException("数据导入处理有误。", MB.Util.APPMessageType.SysFileInfo, ex); } }
/// <summary> /// 显示数据导入对话框。 /// </summary> /// <param name="parent"></param> /// <param name="clientRule"></param> /// <param name="bindingSource"></param> public void ShowDataImportDialog(MB.WinBase.IFace.IViewGridForm viewGridForm, MB.WinBase.Binding.BindingSourceEx bindingSource) { _ViewGridForm = viewGridForm; _ClientRule = viewGridForm.ClientRuleObject as MB.WinBase.IFace.IClientRule; _BindingSource = bindingSource; IDocDataImportProvider importProvider = _ClientRule as IDocDataImportProvider; if (importProvider == null) { MB.Util.TraceEx.Write(string.Format("业务类 {0} 还没有实现相应的数据导入接口 {1}", _ClientRule.GetType().FullName, "IDocDataImportProvider"), MB.Util.APPMessageType.SysErrInfo); throw new MB.Util.APPException("当前模块尚未提供数据导入的功能", APPMessageType.DisplayToUser); } var importInfo = DefaultDataImportDialog.ShowDataImport(_ViewGridForm as Form, _ClientRule, _ClientRule.ClientLayoutAttribute.UIXmlConfigFile, true); if (importInfo == null) { return; } IList hasImportEntity; bool b = importProvider.DataImport(_ViewGridForm, importInfo, out hasImportEntity); if (!b) { return; } DialogResult re = MB.WinBase.MessageBoxEx.Question("数据导入成功,是否需要从数据库中重新刷新数据?"); if (re == DialogResult.Yes) { _ViewGridForm.Refresh(); } else { if (hasImportEntity == null && hasImportEntity.Count == 0) { return; } foreach (object entity in hasImportEntity) { _BindingSource.Add(entity); } } }
//卡片编辑 private bool editCardGrid(MB.XWinLib.XtraGrid.GridControlEx xtraGCtl, object dataSource, MB.WinBase.IFace.IClientRule buiObj, Dictionary <string, MB.WinBase.Common.ColumnEditCfgInfo> editCols) { MB.WinBase.Atts.RuleClientLayoutAttribute layoutAtt = MB.WinBase.Atts.AttributeConfigHelper.Instance.GetClientRuleSettingAtt(buiObj); Dictionary <string, MB.WinBase.Common.ColumnPropertyInfo> colPropertys = MB.WinBase.LayoutXmlConfigHelper.Instance.GetColumnPropertys(layoutAtt.UIXmlConfigFile); MB.XWinLib.XtraGrid.XtraGridViewHelper.Instance.SetEditGridAutoInfo(xtraGCtl); DevExpress.XtraGrid.Views.Card.CardView cardView = xtraGCtl.MainView as DevExpress.XtraGrid.Views.Card.CardView; if (colPropertys == null || colPropertys.Count == 0) { throw new MB.Util.APPException(string.Format("业务对象 {0} 没有配置对应的XML文件Columns 信息。", layoutAtt.UIXmlConfigFile)); } // 设置控件的显示样式 XtraGridViewHelper.Instance.SetCardView(xtraGCtl); if (cardView.Columns.Count > 0) { cardView.Columns.Clear(); } //根据业务处理对象得到对应的 UI 编辑设置信息。 int i = 0; foreach (MB.WinBase.Common.ColumnPropertyInfo fInfo in colPropertys.Values) { DevExpress.XtraGrid.Columns.GridColumn bdc = new DevExpress.XtraGrid.Columns.GridColumn(); //判断该列是否可以进行编辑 DevExpress.XtraEditors.Repository.RepositoryItem rEdit = null; if (editCols != null && editCols.ContainsKey(fInfo.Name)) { rEdit = CreateEditItemByEditInfo(editCols[fInfo.Name], fInfo.CanEdit, fInfo.DataType);//根据用户XML配置的信息获取一个编辑的列。 } else { rEdit = CreateEditItemByCol(fInfo, true); } bdc.ColumnEdit = rEdit; xtraGCtl.RepositoryItems.Add(rEdit); SetEditColumn(bdc, fInfo, null); cardView.Columns.Add(bdc); i++; } xtraGCtl.DataSource = dataSource; return(true); }
/// <summary> /// 根据创建的命令格式化操作菜单项。 /// </summary> /// <param name="moduleInfo"></param> public void RefreshToolsButtonItem(MB.Util.Model.ModuleTreeNodeInfo moduleInfo) { foreach (DevExpress.XtraBars.BarButtonItem butItem in _AllCreateButtonItems.Keys) { butItem.Enabled = true; } if (!string.IsNullOrEmpty(moduleInfo.RejectCommands)) { string[] rejects = moduleInfo.RejectCommands.Split(','); foreach (DevExpress.XtraBars.BarButtonItem butItem in _AllCreateButtonItems.Keys) { XMenuInfo menuInfo = _AllCreateButtonItems[butItem]; UICommandType cType = (UICommandType)menuInfo.CommandID.ID; if (Array.IndexOf(rejects, cType.ToString()) >= 0) { butItem.Enabled = false; } } } MB.WinBase.IFace.IForm activeForm = _CommandExecutor.HostMdiMainForm.GetActiveMdiChildForm(); if (activeForm == null) { return; } //如果是分析界面的话要屏蔽掉操作功能菜单项。 MB.WinBase.IFace.IClientRule editRule = activeForm.ClientRuleObject as MB.WinBase.IFace.IClientRule; if (editRule != null) { return; } foreach (DevExpress.XtraBars.BarButtonItem butItem in _AllCreateButtonItems.Keys) { XMenuInfo menuInfo = _AllCreateButtonItems[butItem]; var info = CommandGroups.EditCommands.FirstOrDefault(o => o.CommandID.Equals(menuInfo.CommandID)); if (info != null) { butItem.Enabled = false; continue; } if (menuInfo.CommandID.Equals(UICommands.DataImport)) { butItem.Enabled = false; continue; } } }
/// <summary> /// 显示数据导入处理窗口。 /// </summary> /// <param name="parent"></param> /// <param name="buiObj"></param> /// <param name="xmlFileName"></param> /// <param name="importImmediate">判断是否为直接导入</param> /// <returns></returns> public static DataImportInfo ShowDataImport(IWin32Window parent, MB.WinBase.IFace.IClientRule buiObj, string xmlFileName, bool importImmediate, Func <DataSet, DataSet> businessCheckAfterLoadImportData) { string file = MB.WinBase.ShareLib.Instance.SelectedFile("Excel 文件 (*.xls)|*.xls|文本文件(*.txt)|*.txt"); if (string.IsNullOrEmpty(file)) { return(null); } if (!file.EndsWith(".xls") && !file.EndsWith(".txt")) { throw new MB.Util.APPException(string.Format("文件 {0} 对应的文件类型暂不支持!", file), MB.Util.APPMessageType.DisplayToUser); } try { DefaultDataImportDialog dialog = new DefaultDataImportDialog(importImmediate); DataSet dsData = dialog.LoadImportData(parent, buiObj, xmlFileName, file); //新增插入业务检查,检查的方法从外部嵌入 if (businessCheckAfterLoadImportData != null) { dsData = dialog.BusinessValidate(businessCheckAfterLoadImportData, dsData); } bool exists = dsData != null && dsData.Tables.Count > 0 && dsData.Tables[0].Rows.Count > 0; if (exists) { DialogResult importSure = dialog.ShowDialog(); if (importSure == DialogResult.OK) { return(dialog.CurrentImportInfo); } } else { DialogResult re = MB.WinBase.MessageBoxEx.Question("没有匹配到任何需要导入的数据,是否需要重新选择"); if (re == DialogResult.Yes) { return(ShowDataImport(parent, buiObj, xmlFileName, importImmediate)); } } return(null); } catch (Exception ex) { throw new MB.Util.APPException(string.Format("加载需要导入的文件{0} 有误!", file), MB.Util.APPMessageType.DisplayToUser, ex); } }
public static DataImportInfo ShowDataImport(IWin32Window parent, MB.WinBase.IFace.IClientRule buiObj, string xmlFileName, bool importImmediate) { return(ShowDataImport(parent, buiObj, xmlFileName, importImmediate, null)); }
//根据当前活动的子窗口 格式化操作的菜单项 private void refreshToolsButtonItem(MB.Util.Model.ModuleTreeNodeInfo moduleInfo) { _RejectCommandItems.Clear(); foreach (DevExpress.XtraBars.BarButtonItem butItem in _AllCreateMenuItems.Keys) { butItem.Enabled = true; } if (!string.IsNullOrEmpty(moduleInfo.RejectCommands)) { string[] rejects = moduleInfo.RejectCommands.Split(','); foreach (DevExpress.XtraBars.BarButtonItem butItem in _AllCreateMenuItems.Keys) { System.ComponentModel.Design.CommandID cmdID = _AllCreateMenuItems[butItem]; UICommandType cType = (UICommandType)cmdID.ID; if (Array.IndexOf(rejects, cType.ToString()) >= 0) { butItem.Enabled = false; if (!_RejectCommandItems.ContainsKey(butItem)) { _RejectCommandItems.Add(butItem, false); } else { _RejectCommandItems[butItem] = false; } } } } MB.WinBase.IFace.IForm activeForm = this.GetActiveMdiChildForm(); if (activeForm == null) { return; } //如果是分析界面的话要屏蔽掉操作功能菜单项。 MB.WinBase.IFace.IClientRule editRule = activeForm.ClientRuleObject as MB.WinBase.IFace.IClientRule; if (editRule != null) { return; } foreach (DevExpress.XtraBars.BarButtonItem butItem in _AllCreateMenuItems.Keys) { System.ComponentModel.Design.CommandID cmdID = _AllCreateMenuItems[butItem]; var info = CommandGroups.EditCommands.FirstOrDefault(o => o.CommandID.Equals(cmdID)); if (info != null) { butItem.Enabled = false; if (!_RejectCommandItems.ContainsKey(butItem)) { _RejectCommandItems.Add(butItem, false); } else { _RejectCommandItems[butItem] = false; } continue; } if (cmdID.Equals(UICommands.DataImport)) { butItem.Enabled = false; if (!_RejectCommandItems.ContainsKey(butItem)) { _RejectCommandItems.Add(butItem, false); } else { _RejectCommandItems[butItem] = false; } continue; } } }
/// <summary> /// 针对实体类的数据验证。 /// </summary> /// <param name="clientRule"></param> /// <param name="editColumnCtls"></param> /// <param name="dataEntity"></param> /// <returns></returns> public bool DataValidated(MB.WinBase.IFace.IClientRule clientRule, List <MB.WinBase.Binding.ColumnBindingInfo> editColumnCtls, object dataEntity) { if (editColumnCtls == null || editColumnCtls.Count == 0) { return(true); } bool re = true; Control firstErrorCtl = null; foreach (MB.WinBase.Binding.ColumnBindingInfo colCfg in editColumnCtls) { _ErrorProvider.SetError(colCfg.BindingControl, string.Empty); if (dataEntity == null) { continue; } bool exists = MB.Util.MyReflection.Instance.CheckObjectExistsProperty(dataEntity, colCfg.ColumnName); if (!exists) { // _ErrorProvider.SetError(colCfg.BindingControl, string.Empty); if (firstErrorCtl == null) { firstErrorCtl = colCfg.BindingControl; } continue; } object val = MB.Util.MyReflection.Instance.InvokePropertyForGet(dataEntity, colCfg.ColumnName); string errMsg = string.Empty; bool check = validated(colCfg.ColumnPropertyInfo, val, ref errMsg); if (!check || errMsg.Length > 0) { re = false; } if (!string.IsNullOrEmpty(errMsg)) { _ErrorProvider.SetError(colCfg.BindingControl, errMsg); if (firstErrorCtl == null) { firstErrorCtl = colCfg.BindingControl; } } } if (firstErrorCtl != null) { firstErrorCtl.Focus(); MB.WinBase.ShareLib.Instance.ShowFocusControl(firstErrorCtl); } if (re) { //在数据检验通过后进行逻辑主键的判断 string[] logicKeys = MB.WinBase.LayoutXmlConfigHelper.Instance.GetLogicKeys(clientRule.ClientLayoutAttribute.UIXmlConfigFile); if (logicKeys != null && logicKeys.Length > 0 && clientRule.MainDataTypeInDoc != null) { clientRule.CheckValueIsExists((int)clientRule.MainDataTypeInDoc, dataEntity, logicKeys); } } return(re); }