Exemple #1
0
        private void showQueryParamterInput()
        {
            MB.Util.Model.ModuleCommandInfo commandInfo = this._AsynQueryRule.ModuleTreeNodeInfo.Commands.Find
                                                              (o => string.Compare(o.CommandID, MB.BaseFrame.SOD.MODULE_COMMAND_QUERY, true) == 0);

            Form frm = null;

            if (_QueryFilterForm == null)
            {
                if (commandInfo == null)
                {
                    _QueryFilterForm = new MB.WinClientDefault.QueryFilter.FrmQueryFilterInput(false);
                }
                else
                {
                    _QueryFilterForm = MB.WinClientDefault.UICommand.UICreateHelper.Instance.CreateQueryFilterForm(commandInfo);
                }
                _QueryFilterForm.ClientRuleObject = _AsynQueryRule;
                _QueryFilterForm.ViewGridForm     = this;
                _QueryFilterForm.IniCreateFilterElements();
                _QueryFilterForm.AfterInputQueryParameter += new QueryFilterInputEventHandle(filterForm_AfterInputQueryParameter);
            }


            frm      = _QueryFilterForm as Form;
            frm.Text = this.Text;
            frm.ShowDialog(this);
        }
        /// <summary>
        /// 双击grid中的信息,打开详细界面
        /// </summary>
        protected virtual void ShowDetailForm()
        {
            //如果异步窗口的UIRule不是从AbstractClientRule继承而来的,则不能双击打开
            if (!(this._AsynQueryRule is IClientRule))
            {
                return;
            }
            MB.Util.Model.ModuleCommandInfo commandInfo = this._AsynQueryRule.ModuleTreeNodeInfo.Commands.Find
                                                              (o => string.Compare(o.CommandID, MB.BaseFrame.SOD.MODULE_COMMAND_ADD, true) == 0);

            var cInfo = this._AsynQueryRule.ModuleTreeNodeInfo.Commands.Find
                            (o => string.Compare(o.CommandID, MB.BaseFrame.SOD.MODULE_COMMAND_EDIT, true) == 0);

            //如果不存在就去新增加的默认配置
            if (cInfo != null)
            {
                commandInfo = cInfo;
            }

            if (commandInfo == null)
            {
                MB.WinBase.MessageBoxEx.Show(string.Format("模块{0} 的编辑窗口没有配置!", this._AsynQueryRule.ModuleTreeNodeInfo.Name));
                return;
            }

            IExtenderEditForm baseEditForm = null;

            IClientRule clientRule = _AsynQueryRule as IClientRule;

            if (clientRule == null)
            {
                throw new APPException("异步模块如果要打开详细信息,UI Rule必需继承自AbstractClientRule", APPMessageType.DisplayToUser);
            }

            try
            {
                MB.WinBase.IFace.IForm editForm = MB.WinClientDefault.UICommand.UICreateHelper.Instance.CreateObjectEditForm(
                    commandInfo, ClientRuleObject as IClientRule, ObjectEditType.OpenReadOnly, _BindingSource);
                Form frm = editForm as Form;

                baseEditForm = editForm as IExtenderEditForm;
                if (baseEditForm != null)
                {
                    baseEditForm.MainBindingGridView = new MB.WinClientDefault.Common.MainViewDataNavigator(gridViewMain);
                }

                frm.ShowDialog();
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (baseEditForm != null)
                {
                    baseEditForm.DisposeBindingEvent();
                }
            }
        }
        /// <summary>
        /// 创建数据网格浏览界面。
        /// </summary>
        /// <param name="mdiForm"></param>
        /// <param name="nodeInfo"></param>
        /// <param name="opennedFrom"></param>
        public void ShowViewGridForm(MB.WinBase.IFace.IMdiMainForm mdiForm, MB.Util.Model.ModuleTreeNodeInfo nodeInfo, ModuleOpenState openState)
        {
            MB.Util.Model.ModuleCommandInfo commandInfo = nodeInfo.Commands.Find
                                                              (o => (UICommandType)Enum.Parse(typeof(UICommandType), o.CommandID) == UICommandType.Open);

            if (commandInfo == null)
            {
                MB.WinBase.MessageBoxEx.Show(string.Format("模块{0} 的浏览窗口没有配置!", nodeInfo.Name));
                return;
            }

            IForm viewGridForm = null;

            try {
                viewGridForm = CreateWinForm(null, commandInfo) as IForm;

                var uiStyle = viewGridForm.ActiveUIType;
                //viewGridForm.ModuleInfo = nodeInfo;
                if (viewGridForm.ClientRuleObject != null)
                {
                    viewGridForm.ClientRuleObject.OpennedState       = openState;
                    viewGridForm.ClientRuleObject.ModuleTreeNodeInfo = nodeInfo;
                    //验证当前活动窗口的列信息。
                    mdiForm.ValidatedColumns(viewGridForm);
                }



                Form frmMdiChild = viewGridForm as Form;
                frmMdiChild.Text = nodeInfo.Name;
                if (uiStyle == ClientUIType.ShowModelForm)
                {
                    (viewGridForm as Form).ShowDialog();
                }
                else
                {
                    frmMdiChild.MdiParent = mdiForm as Form;
                    frmMdiChild.Show();
                }
                //else {
                //    throw new MB.Util.APPException(string.Format("窗口配置的ShowModel类型 {0} 当前还没有进行处理", commandInfo.ViewModel.ToString()), MB.Util.APPMessageType.SysErrInfo);
                //}
            }
            catch (MB.Util.APPException aex) {
                if (viewGridForm != null)
                {
                    (viewGridForm as Form).Dispose();
                }
                throw aex;
            }
            catch (Exception ex) {
                if (viewGridForm != null)
                {
                    (viewGridForm as Form).Dispose();
                }
                //throw new MB.Util.APPException(" 根据ModuleTreeNodeInfo 的信息创建窗口时出错:", MB.Util.APPMessageType.SysErrInfo  , ex);
                throw MB.Util.APPExceptionHandlerHelper.PromoteException(ex, " 根据ModuleTreeNodeInfo 的信息创建窗口时出错!");
            }
        }
        /// <summary>
        /// 根据指定的参数创建对象编辑窗口。
        /// </summary>
        /// <param name="commandInfo"></param>
        /// <param name="clientRuleObject"></param>
        /// <param name="editType"></param>
        /// <param name="bindingSource"></param>
        /// <returns></returns>
        public MB.WinBase.IFace.IForm CreateObjectEditForm(MB.Util.Model.ModuleCommandInfo commandInfo,
                                                           IClientRule clientRuleObject, ObjectEditType editType, BindingSourceEx bindingSource)
        {
            string[] formSetting    = commandInfo.UIView.Split(',');
            object[] formCreatePars = new object[] { clientRuleObject, editType, bindingSource };

            MB.WinBase.IFace.IForm winForm = MB.Util.DllFactory.Instance.LoadObject(formSetting[0], formCreatePars, formSetting[1]) as MB.WinBase.IFace.IForm;
            MB.Util.TraceEx.WriteIf(winForm != null, string.Format("请检查数据库中该功能模块对应的显示窗口{0},是否设置出错!", commandInfo.UIView), MB.Util.APPMessageType.SysErrInfo);
            return(winForm);
        }
        private void showQueryParamterInput()
        {
            MB.Util.Model.ModuleCommandInfo commandInfo = this._ClientRuleObject.ModuleTreeNodeInfo.Commands.Find
                                                              (o => string.Compare(o.CommandID, MB.BaseFrame.SOD.MODULE_COMMAND_QUERY, true) == 0);

            Form frm = null;


            if (_QueryFilterForm == null)
            {
                if (commandInfo == null)
                {
                    _QueryFilterForm = new MB.WinClientDefault.QueryFilter.FrmQueryFilterInput();
                }
                else
                {
                    _QueryFilterForm = MB.WinClientDefault.UICommand.UICreateHelper.Instance.CreateQueryFilterForm(commandInfo);
                }
                _QueryFilterForm.ClientRuleObject = ClientRuleObject;
                _QueryFilterForm.ViewGridForm     = this;
                _QueryFilterForm.IniCreateFilterElements();
                _QueryFilterForm.AfterInputQueryParameter += new QueryFilterInputEventHandle(filterForm_AfterInputQueryParameter);
            }

            #region 如果是动态聚组的查询,先要判断是否设置了动态聚组条件,如果没有,强制设置
            if (this._IsDynamicGroupIsActive)
            {
                if (_DynamicGroupSettings == null)
                {
                    if (_DynamicGroupSettingUI == null)
                    {
                        _DynamicGroupSettingUI = new FrmDynamicGroupSetting(this, _ClientRuleObject);
                    }
                    _DynamicGroupSettings = _DynamicGroupSettingUI.GetDynamicGroupSetting();
                }
                Util.Model.DynamicGroupSetting dySetting = _DynamicGroupSettings;
                if (dySetting == null || dySetting.DataAreaFields == null || dySetting.DataAreaFields.Count <= 0)
                {
                    MB.WinBase.MessageBoxEx.Show("没有设置聚组列和条件,请设置");
                    if (_DynamicGroupSettingUI == null)
                    {
                        _DynamicGroupSettingUI = new FrmDynamicGroupSetting(this, _ClientRuleObject, _QueryFilterForm);
                    }
                    if (_DynamicGroupSettingUI.ShowDialog() != System.Windows.Forms.DialogResult.OK)
                    {
                        return;
                    }
                }
            }
            #endregion

            frm      = _QueryFilterForm as Form;
            frm.Text = this.Text;
            frm.ShowDialog();
        }
        /// <summary>
        /// 创建普通的显示窗口。
        /// </summary>
        /// <param name="commandInfo"></param>
        /// <returns></returns>
        public MB.WinBase.IFace.IForm CreateGeneralForm(MB.Util.Model.ModuleCommandInfo commandInfo)
        {
            string[] formSetting    = commandInfo.UIView.Split(',');
            object[] formCreatePars = null;

            Form winForm = MB.Util.DllFactory.Instance.LoadObject(formSetting[0], formCreatePars, formSetting[1]) as Form;

            MB.Util.TraceEx.WriteIf(winForm != null, string.Format("请检查数据库中该功能模块对应的显示窗口{0},是否设置出错!", commandInfo.UIView), MB.Util.APPMessageType.SysErrInfo);
            MB.WinBase.IFace.IForm frm = winForm as MB.WinBase.IFace.IForm;
            if (frm == null)
            {
                throw new MB.Util.APPException("所有弹出窗口必须实现 MB.WinBase.IFace.IForm 接口!", MB.Util.APPMessageType.SysFileInfo);
            }
            return(frm);
        }
        /// <summary>
        /// 根据指定的模块命令参数 创建Win Form 窗口。
        /// </summary>
        /// <param name="clientRule">指定的客户端业务类,可以为空。</param>
        /// <param name="commandInfo">模块命令参数</param>
        /// <returns></returns>
        public MB.WinBase.IFace.IForm CreateWinForm(MB.WinBase.IFace.IClientRuleQueryBase clientRule, MB.Util.Model.ModuleCommandInfo commandInfo)
        {
            try {
                string[] clientRuleSetting = null;
                if (!string.IsNullOrEmpty(commandInfo.ClientRule))
                {
                    clientRuleSetting = commandInfo.ClientRule.Split(',');
                }
                string[] formSetting    = commandInfo.UIView.Split(',');
                object[] ruleCreatePars = null;
                object[] formCreatePars = null;
                if (!string.IsNullOrEmpty(commandInfo.RuleCreateParams))
                {
                    ruleCreatePars = commandInfo.RuleCreateParams.Split(',');
                }
                if (!string.IsNullOrEmpty(commandInfo.UICreateParams))
                {
                    formCreatePars = commandInfo.UICreateParams.Split(',');
                }

                MB.WinBase.IFace.IClientRuleQueryBase rule = clientRule;
                if (!string.IsNullOrEmpty(commandInfo.ClientRule))
                {
                    if (clientRule == null || string.Compare(clientRuleSetting[0], clientRule.GetType().FullName, true) != 0)
                    {
                        var temp = MB.Util.DllFactory.Instance.LoadObject(clientRuleSetting[0], ruleCreatePars, clientRuleSetting[1]);
                        rule = temp as MB.WinBase.IFace.IClientRuleQueryBase;
                    }
                    MB.Util.TraceEx.WriteIf(rule != null, string.Format("请检查数据库中该功能模块对应的客户端类{0} 是否设置出错!", commandInfo.ClientRule), MB.Util.APPMessageType.SysErrInfo);
                }
                MB.WinBase.IFace.IForm winForm = MB.Util.DllFactory.Instance.LoadObject(formSetting[0], formCreatePars, formSetting[1]) as MB.WinBase.IFace.IForm;
                MB.Util.TraceEx.WriteIf(winForm != null, string.Format("请检查数据库中该功能模块对应的显示窗口{0},是否设置出错!", commandInfo.UIView), MB.Util.APPMessageType.SysErrInfo);
                winForm.ClientRuleObject = rule;
                return(winForm);
            }
            catch (MB.Util.APPException aex) {
                throw aex;
            }
            catch (Exception ex) {
                throw MB.Util.APPExceptionHandlerHelper.PromoteException(ex, MB.Util.APPMessageType.SysErrInfo);
            }
        }
        //显示对象窗口
        protected virtual void ShowObjectEditForm(ObjectEditType editType)
        {
            if (editType != ObjectEditType.AddNew && _BindingSource.Current == null)
            {
                return;
            }


            MB.Util.Model.ModuleCommandInfo commandInfo = this._ClientRuleObject.ModuleTreeNodeInfo.Commands.Find
                                                              (o => string.Compare(o.CommandID, MB.BaseFrame.SOD.MODULE_COMMAND_ADD, true) == 0);

            if (editType == ObjectEditType.OpenEdit)
            {
                var cInfo = this._ClientRuleObject.ModuleTreeNodeInfo.Commands.Find
                                (o => string.Compare(o.CommandID, MB.BaseFrame.SOD.MODULE_COMMAND_EDIT, true) == 0);
                //如果不存在就去新增加的默认配置
                if (cInfo != null)
                {
                    commandInfo = cInfo;
                }
            }
            if (commandInfo == null)
            {
                MB.WinBase.MessageBoxEx.Show(string.Format("模块{0} 的编辑窗口没有配置!", this._ClientRuleObject.ModuleTreeNodeInfo.Name));
                return;
            }
            if (_BindingSource == null)
            {
                throw new MB.Util.APPException(" 目前框架只支持绑定到数据实体的集合,对于DataSet 目前不支持显示对象窗口的编辑。", MB.Util.APPMessageType.SysFileInfo);
            }

            //
            IExtenderEditForm baseEditForm = null;

            try {
                MB.WinBase.IFace.IForm editForm = MB.WinClientDefault.UICommand.UICreateHelper.Instance.CreateObjectEditForm(
                    commandInfo, ClientRuleObject as IClientRule, editType, _BindingSource);

                if (editForm == null)
                {
                    throw new MB.Util.APPException(" 以DefaultViewForm 做为浏览窗口的编辑窗口必须 实现  MB.WinBase.IFace.IForm  ");
                }
                Form frm = editForm as Form;

                baseEditForm = editForm as IExtenderEditForm;
                if (baseEditForm != null)
                {
                    baseEditForm.MainBindingGridView = this.GetViewDataNavigator();
                }

                frm.ShowDialog();
                //如果动态列,则关闭编辑页面以后自动刷新查询窗口
                //if (_ClientRuleObject.ClientLayoutAttribute.LoadType == ClientDataLoadType.ReLoad)
                //    Refresh();
            }
            catch (Exception ex) {
                throw ex;
            }
            finally {
                if (baseEditForm != null)
                {
                    baseEditForm.DisposeBindingEvent();
                }
            }
        }