예제 #1
0
        public static void SetMenuState(this IChildMdiForm menuWindow)
        {
            if (menuWindow == null)
            {
                return;
            }
            IList <IButton> tsbs = menuWindow.GetCustomProperty(s_windowMenuButtonName) as IList <IButton>;

            if (tsbs != null)
            {
                IControlManagerContainer cmContainer = menuWindow as IControlManagerContainer;
                if (cmContainer != null)
                {
                    if (cmContainer != null && cmContainer.ControlManager != null)
                    {
                        foreach (IButton tsb in tsbs)
                        {
                            SetTsbState(tsb, cmContainer.ControlManager);
                        }
                    }
                }
                else
                {
                    IDisplayManagerContainer dmContainer = menuWindow as IDisplayManagerContainer;
                    if (dmContainer != null && dmContainer.DisplayManager != null)
                    {
                        foreach (IButton tsb in tsbs)
                        {
                            SetTsbState(tsb, dmContainer.DisplayManager);
                        }
                    }
                }
            }
        }
예제 #2
0
        internal static void OnButtonClick(WindowMenuInfo windowMenuInfo, System.Windows.Forms.Form parentForm)
        {
            IArchiveDetailFormWithDetailGrids addg = parentForm as IArchiveDetailFormWithDetailGrids;

            if (addg != null)
            {
                foreach (IBoundGrid i in addg.DetailGrids)
                {
                    MyGrid.CancelEditCurrentDataRow(i);
                }
            }
            IGridContainer agf = parentForm as IGridContainer;

            if (agf != null)
            {
                MyGrid.CancelEditCurrentDataRow(agf.MasterGrid);
            }

            IControlManagerContainer cmc = parentForm as IControlManagerContainer;

            if (cmc != null)
            {
                InternalExecuteWindowMenu(cmc.ControlManager, windowMenuInfo, parentForm);
            }
            else
            {
                IDisplayManagerContainer dmc = parentForm as IDisplayManagerContainer;
                if (dmc != null)
                {
                    InternalExecuteWindowMenu(dmc.DisplayManager, windowMenuInfo, parentForm);
                    //InternalExecuteWindowMenu((parentForm as ArchiveDetailForm).ParentArchiveForm, windowMenuInfo);
                }
            }
        }
        internal static void ShowFrom(string actionId, ISearchExpression se, bool asDetailDialog)
        {
            IDisplayManagerContainer seeForm    = null;
            ArchiveDetailForm        detailForm = null;
            ISearchManager           sm         = null;

            if (!asDetailDialog)
            {
                seeForm = (ServiceProvider.GetService <IApplication>() as IWinFormApplication).ExecuteAction(actionId) as IDisplayManagerContainer;
                if (seeForm == null)
                {
                    throw new InvalidOperationException("未能创建目标窗体!");
                }

                sm = seeForm.DisplayManager.SearchManager;
            }
            else
            {
                //detailForm = Feng.Utils.ReflectionHelper.CreateInstanceFromType(Feng.Utils.ReflectionHelper.GetTypeFromName(info.ToDetailForm)) as ArchiveDetailForm;
                //if (detailForm == null)
                //{
                //    MessageForm.ShowError("未能创建目标窗体!");
                //    return;
                //}
                //detailForm.UpdateContent();
                //findWindow = detailForm.DisplayManager.SearchManager;
            }

            if (sm == null)
            {
                throw new InvalidOperationException("未能找到目标窗体的查找窗口!");
            }

            //List<ISearchExpression> findList = new List<ISearchExpression>();
            //ISearchExpression findCondition = GetAndFindCondition(selected, 0, toColumns);
            //for (int i = 1; i < selected[0].Count; ++i)
            //{
            //    findCondition = new LogicalExpression(findCondition, GetAndFindCondition(selected, i, toColumns), LogicalOperator.Or);
            //}
            //findList.Add(findCondition);
            sm.LoadData(se, null);

            if (asDetailDialog)
            {
                if (detailForm.ControlManager.DisplayManager.Count == 0)
                {
                    ServiceProvider.GetService <IMessageBox>().ShowWarning("未能找到相应记录!");
                    return;
                }

                detailForm.ControlManager.DisplayManager.Position = 0;

                detailForm.ShowDialog();

                detailForm.Dispose();
            }
        }
예제 #4
0
        void GridGotoDetailFormToolStripItem_DropDownOpened(object sender, EventArgs e)
        {
            IDisplayManagerContainer parentForm = this.Parent.FindForm() as IDisplayManagerContainer;

            if (parentForm != null)
            {
                object entity = parentForm.DisplayManager.Position == -1 ? null : parentForm.DisplayManager.CurrentItem;

                foreach (ToolStripItem item in this.DropDownItems)
                {
                    GridRelatedInfo info = item.Tag as GridRelatedInfo;
                    item.Visible = Permission.AuthorizeByRule(info.Visible, entity);
                }
            }
        }
예제 #5
0
        internal static Tuple <string, object> GetDataCellValue(string s2, Xceed.Grid.Cell cell)
        {
            string s1 = s2;
            // maybe there is '.'
            int    idx = s1.IndexOf('_');
            string dataControlName, propertyName;

            if (idx == -1)
            {
                dataControlName = s1;
                propertyName    = null;
            }
            else
            {
                dataControlName = s1.Substring(0, idx);
                propertyName    = s1.Substring(idx + 1);
            }

            object o = null;

            if (cell.ParentRow.Cells[dataControlName] != null)
            {
                o = cell.ParentRow.Cells[dataControlName].Value;
            }
            else
            {
                // 如果未找到Cell,则找父级DataControl
                IDisplayManagerContainer form = cell.GridControl.FindForm() as IDisplayManagerContainer;
                if (form != null)
                {
                    IDataControl parentDc = form.DisplayManager.DataControls[dataControlName];
                    o = parentDc.SelectedDataValue;
                }
            }

            if (!string.IsNullOrEmpty(propertyName))
            {
                propertyName = propertyName.Replace('_', '.');
                o            = EntityScript.GetPropertyValue(o, propertyName);
            }

            //if (o == null)
            //{
            //    throw new ArgumentException("there is no column or datacontrol with name " + s1 + "!");
            //}

            return(new Tuple <string, object>(dataControlName, o));
        }
예제 #6
0
        private static void DisplayManager_PositionChanged(this IDisplayManagerContainer dmContainer, object sender, EventArgs e)
        {
            IDisplayManager dm = sender as IDisplayManager;

            if (dm == dmContainer.DisplayManager)
            {
                SetMenuState(dmContainer as IChildMdiForm);
            }
            //if (this.ArchiveDetailForm != null && dm == this.ArchiveDetailForm.DisplayManager)
            //{
            //    foreach (IButton tsb in m_tsbsDetail)
            //    {
            //        SetTsbState(tsb, this.ArchiveDetailForm.DisplayManager);
            //    }
            //}
        }
예제 #7
0
        public static void DisposeWindowMenu(this IChildMdiForm menuWindow)
        {
            IList <IButton> tsbs = menuWindow.GetCustomProperty(s_windowMenuButtonName) as IList <IButton>;

            if (tsbs != null)
            {
                foreach (IButton tsb in tsbs)
                {
                    tsb.Click -= new EventHandler(tsb_Click);
                }
                tsbs.Clear();
            }

            ToolStrip toolStrip = menuWindow.GetCustomProperty("WindowMenuGeneratedToolStrip") as ToolStrip;

            if (toolStrip != null)
            {
                menuWindow.RevertMergeToolStrip(toolStrip);
            }

            IControlManagerContainer cmContainer = menuWindow as IControlManagerContainer;

            if (cmContainer != null && cmContainer.ControlManager != null)
            {
                cmContainer.ControlManager.DisplayManager.PositionChanged -= new EventHandler(cmContainer.ControlManager_PositionChanged);
                cmContainer.ControlManager.EditEnded    -= new EventHandler(cmContainer.ControlManager_EditEnded);
                cmContainer.ControlManager.StateChanged -= new EventHandler(cmContainer.ControlManager_StateChanged);
            }
            else
            {
                IDisplayManagerContainer dmContainer = menuWindow as IDisplayManagerContainer;
                if (dmContainer != null && dmContainer.DisplayManager != null)
                {
                    dmContainer.DisplayManager.PositionChanged -= new EventHandler(dmContainer.DisplayManager_PositionChanged);
                }
            }
        }
예제 #8
0
        public static void GenerateWindowMenu(this IChildMdiForm menuWindow, IList <WindowMenuInfo> windowMenuInfos)
        {
            // WindowMenu
            if (windowMenuInfos != null && windowMenuInfos.Count > 0)
            {
                IList <IButton> tsbs            = new List <IButton>();
                ToolStrip       toolStripDetail = GenerateWindowMenu(windowMenuInfos, tsbs, GetExistToolStripItems(menuWindow.ToolStrip));
                menuWindow.MergeToolStrip(toolStripDetail);

                menuWindow.SetCustomProperty(s_windowMenuButtonName, tsbs);
                menuWindow.SetCustomProperty("WindowMenuGeneratedToolStrip", toolStripDetail);

                IControlManagerContainer cmContainer = menuWindow as IControlManagerContainer;
                if (cmContainer != null && cmContainer.ControlManager != null)
                {
                    cmContainer.ControlManager.DisplayManager.PositionChanged -= new EventHandler(cmContainer.ControlManager_PositionChanged);
                    cmContainer.ControlManager.EditEnded    -= new EventHandler(cmContainer.ControlManager_EditEnded);
                    cmContainer.ControlManager.StateChanged -= new EventHandler(cmContainer.ControlManager_StateChanged);

                    cmContainer.ControlManager.DisplayManager.PositionChanged += new EventHandler(cmContainer.ControlManager_PositionChanged);
                    cmContainer.ControlManager.EditEnded    += new EventHandler(cmContainer.ControlManager_EditEnded);
                    cmContainer.ControlManager.StateChanged += new EventHandler(cmContainer.ControlManager_StateChanged);
                }
                else
                {
                    IDisplayManagerContainer dmContainer = menuWindow as IDisplayManagerContainer;
                    if (dmContainer != null && dmContainer.DisplayManager != null)
                    {
                        // only one. DetailWindow.DisplayManager = MasterWindow.DisplayManager. 当时也可能不一致,-=无效。
                        // // 可能和MasterWindow不是同一个ControlManager
                        dmContainer.DisplayManager.PositionChanged -= new EventHandler(dmContainer.DisplayManager_PositionChanged);
                        dmContainer.DisplayManager.PositionChanged += new EventHandler(dmContainer.DisplayManager_PositionChanged);
                    }
                }
            }
        }
예제 #9
0
        /// <summary>
        /// 按照自定义规则按照地址导航程序到某个界面
        /// http://cd/{action}/exp={exp}&order={order}&pos={pos}
        /// http://cd/action/查询统计_人员单位/?exp=编号 = 100000&order=编号&pos=1
        /// </summary>
        /// <param name="app"></param>
        /// <param name="address"></param>
        public static void NavigateTo(this IApplication app, string address)
        {
            if (string.IsNullOrEmpty(address) || !address.StartsWith(s_addressHeader))
            {
                return;
            }

            string content = address.Substring(s_addressHeader.Length);

            if (!content.Contains("action/"))
            {
                content = Decrypt(content);
                address = s_addressHeader + content;
            }

            UriTemplate template    = new UriTemplate("action/{action}/?exp={exp}&order={order}&pos={pos}");
            Uri         baseAddress = new Uri(s_addressHeader + SystemConfiguration.ApplicationName);
            Uri         fullUri     = new Uri(address);


            // Match a URI to a template
            UriTemplateMatch results = template.Match(baseAddress, fullUri);

            if (results != null && results.BaseUri == baseAddress)
            {
                try
                {
                    IDisplayManagerContainer dmC = app.ExecuteAction(results.BoundVariables["action"]) as IDisplayManagerContainer;
                    if (dmC == null)
                    {
                        return;
                    }
                    if (dmC.DisplayManager != null && dmC.DisplayManager.SearchManager != null)
                    {
                        var t = results.BoundVariables["first"];
                        if (t != null)
                        {
                            int?first = Feng.Utils.ConvertHelper.ToInt(t);
                            if (first.HasValue)
                            {
                                dmC.DisplayManager.SearchManager.FirstResult = first.Value;
                            }
                        }
                        t = results.BoundVariables["count"];
                        if (t != null)
                        {
                            int?count = Feng.Utils.ConvertHelper.ToInt(t);
                            if (count.HasValue)
                            {
                                dmC.DisplayManager.SearchManager.MaxResult = count.Value;
                            }
                        }
                        t = results.BoundVariables["exp"];
                        if (t != null)
                        {
                            var exp   = SearchExpression.Parse(t);
                            var order = SearchOrder.Parse(results.BoundVariables["order"]);

                            if (exp != null)
                            {
                                dmC.DisplayManager.SearchManager.LoadData(exp, order);
                                dmC.DisplayManager.Position = 0;
                            }
                        }
                    }
                }
                catch (Exception ex)
                {
                    ExceptionProcess.ProcessWithNotify(ex);
                }
            }
        }
예제 #10
0
        /// <summary>
        /// ShowArchiveDetailForm
        /// </summary>
        /// <param name="detailForm"></param>
        public void ShowArchiveDetailForm()
        {
            IArchiveDetailForm detailForm = this.ArchiveDetailForm;
            Form form = detailForm as Form;

            if (form == null)
            {
                return;
            }

            // 需要变换DetailForm状态
            //if (form.Visible)
            //{
            //    return;
            //}

            //TabbedMdiForm mdiForm = TabbedMdiForm.GetMainForm();
            //if (mdiForm != null)
            {
                form.Text = this.Text + "_详细";

                //// show in mdi
                //mdiForm.AddFormToGroup(form, 1);
                //form.InvisibleOnClosing = true;

                form.FormBorderStyle = FormBorderStyle.None;
                form.TopLevel        = false;
                form.Dock            = DockStyle.Fill;
                this.splitContainer1.Panel2.Controls.Add(form);
                // 如果是最大化,里面的控件不能随着Panel2大小改变而改变
                //form.WindowState = FormWindowState.Maximized;
                // 在还没Show之前,SplitterDistance是按照原大小来的,此时改变窗体大小,SplitterDistance会按比例改变。
                // 所以应该先改变大小,再读入SplitterDistance
                form.Size = new Size(this.Width, this.Height - this.splitContainer1.SplitterDistance);

                this.splitContainer1.Panel2Collapsed = false;

                if (detailForm.MenuStrip != null)
                {
                    detailForm.MenuStrip.Visible = false;
                }
            }
            //else
            //{
            //    form.TopLevel = true;
            //}

            form.VisibleChanged -= new EventHandler(detailForm_VisibleChanged);
            form.VisibleChanged += new EventHandler(detailForm_VisibleChanged);

            form.Show();

            detailForm.UpdateContent();
            //if (detailForm is ArchiveDetailForm)
            //{
            //    (detailForm as ArchiveDetailForm).UpdateContent();
            //}
            //else if (detailForm is ArchiveSeeForm)
            //{
            //    (detailForm as ArchiveSeeForm).UpdateContent();
            //}
            // 如果DisplayManager是BindingSource类型的,如果Cancel会导致 PositionChanged,所以只能Disable Grid
            //  && form.ControlManager != null
            //    && (form.ControlManager.State == StateType.Add || form.ControlManager.State == StateType.Edit)
            // 还不是很好,有问题。Todo
            IDisplayManagerContainer dmc = detailForm as IDisplayManagerContainer;

            if (this.MasterGrid != null && dmc != null && dmc.DisplayManager == this.DisplayManager)
            {
                this.MasterGrid.ReadOnly = true;
            }
        }