コード例 #1
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="synchronizationRoot"></param>
        /// <returns></returns>
        protected override DetailGrid CreateInstance(DetailGrid synchronizationRoot)
        {
            DataBoundDetailGrid grid = new DataBoundDetailGrid(this, synchronizationRoot);

            //grid.SetDisplayManager(this.DisplayManager, this.GridName);

            grid.DisplayManager = this.DisplayManager.Clone() as IDisplayManager;
            grid.GridName       = this.GridName;
            grid.DisplayManager.BindingControls.Clear();
            grid.DisplayManager.BindingControls.Add(grid);

            ISearchManagerWithParent fm = grid.DisplayManager.SearchManager as ISearchManagerWithParent;

            if (fm != null)
            {
                DataBoundDetailGrid parentGrid = this.ParentGrid as DataBoundDetailGrid;
                if (parentGrid != null)
                {
                    fm.ParentDisplayManager = parentGrid.DisplayManager;
                }
            }

            // 模版能复制事件,其实为当新Instance事件触发时,也会调用模版的触发处理函数
            return(grid);
        }
コード例 #2
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="synchronizationRoot"></param>
        /// <returns></returns>
        protected override DetailGrid CreateInstance(DetailGrid synchronizationRoot)
        {
            DataUnboundDetailGrid grid = new DataUnboundDetailGrid(this, synchronizationRoot);

            //grid.SetDisplayManager(this.DisplayManager, this.GridName);

            grid.DisplayManager = this.DisplayManager.Clone() as IDisplayManager;
            grid.GridName       = this.GridName;
            grid.DisplayManager.BindingControls.Clear();
            grid.DisplayManager.BindingControls.Add(grid);

            // 如果parent还是DetailGrid,此时因为是从Template复制,ParentDisplayManager也为Tempalte的Parent,
            // 应该是从具体的Parent DetailGrid里来
            ISearchManagerWithParent smp = grid.DisplayManager.SearchManager as ISearchManagerWithParent;

            if (smp != null)
            {
                DataBoundDetailGrid parentGrid = this.ParentGrid as DataBoundDetailGrid;
                if (parentGrid != null)
                {
                    smp.ParentDisplayManager = parentGrid.DisplayManager;
                }
            }

            return(grid);
        }
        /// <summary>
        /// AddDetailGrid
        /// </summary>
        /// <param name="grid"></param>
        /// <param name="detailGrid"></param>
        public static void AddDetailGrid(this IBoundGridWithDetailGridLoadOnDemand grid, DataBoundDetailGrid detailGrid)
        {
            GridAddDataRowExtention.AddDetailGrid(grid, detailGrid);

            detailGrid.CollapsedChanged -= new EventHandler(detailGrid_CollapsedChanged);
            detailGrid.CollapsedChanged += new EventHandler(detailGrid_CollapsedChanged);
        }
コード例 #4
0
        /// <summary>
        /// 
        /// </summary>
        /// <param name="synchronizationRoot"></param>
        /// <returns></returns>
        protected override DetailGrid CreateInstance(DetailGrid synchronizationRoot)
        {
            DataBoundDetailGrid grid = new DataBoundDetailGrid(this, synchronizationRoot);
            //grid.SetDisplayManager(this.DisplayManager, this.GridName);

            grid.DisplayManager = this.DisplayManager.Clone() as IDisplayManager;
            grid.GridName = this.GridName;
            grid.DisplayManager.BindingControls.Clear();
            grid.DisplayManager.BindingControls.Add(grid);

            ISearchManagerWithParent fm = grid.DisplayManager.SearchManager as ISearchManagerWithParent;
            if (fm != null)
            {
                DataBoundDetailGrid parentGrid = this.ParentGrid as DataBoundDetailGrid;
                if (parentGrid != null)
                {
                    fm.ParentDisplayManager = parentGrid.DisplayManager;
                }
            }

            // 模版能复制事件,其实为当新Instance事件触发时,也会调用模版的触发处理函数
            return grid;
        }
        private static void detailGrid_CollapsedChanged(object sender, EventArgs e)
        {
            DataBoundDetailGrid detailGrid = sender as DataBoundDetailGrid;

            if (detailGrid == null)
            {
                return;
            }

            if (!detailGrid.Collapsed)
            {
                // Buffer
                if (detailGrid.DataRows.Count > 0)
                {
                    return;
                }

                //detailGrid.GridControl.CurrentRow = detailGrid.ParentDataRow;

                // detailGrid.ParentGrid is Xceed.Grid.MasterGrid
                // detailGrid.GridControl is IboundGrid 当时不适用于多层情况
                //IBoundGrid parentGrid = detailGrid.ParentGrid as IBoundGrid;
                //if (parentGrid == null)
                //{
                //    throw new ArgumentException("Parent Grid should be IBoundGrid!");
                //}

                ISearchManagerWithParent smp = detailGrid.DisplayManager.SearchManager as ISearchManagerWithParent;
                if (smp == null)
                {
                    throw new ArgumentException("detailGrid.DisplayManager.SearchManager should be ISearchManagerWithParent!");
                }
                IDisplayManager dmParent = smp.ParentDisplayManager;
                try
                {
                    dmParent.BeginBatchOperation();

                    int oldPos = dmParent.Position;
                    if (oldPos != detailGrid.ParentDataRow.Index)
                    {
                        dmParent.Position = detailGrid.ParentDataRow.Index;
                    }
                    if (detailGrid is ArchiveUnboundDetailGrid)
                    {
                        ((ArchiveUnboundDetailGrid)detailGrid).ArchiveGridHelper.Initialize();
                    }

                    GridInfo gridInfo = ADInfoBll.Instance.GetGridInfo(detailGrid.GridName);

                    bool gridVisible = true;
                    if (!string.IsNullOrEmpty(gridInfo.VisibleAsDetail))
                    {
                        gridVisible = Permission.AuthorizeByRule(gridInfo.VisibleAsDetail, dmParent.CurrentItem);
                    }
                    if (!gridVisible)
                    {
                        detailGrid.Visible = false;
                    }
                    else
                    {
                        detailGrid.Visible = true;

                        // 可能有多个DetailGrid,只处理第一个
                        if (m_detailGridsState.Count == 0)
                        {
                            m_detailGridsState = new ArrayList {
                                detailGrid, detailGrid.GridControl.Enabled, oldPos
                            };

                            detailGrid.GridControl.Enabled = false;
                            detailGrid.DisplayManager.SearchManager.DataLoaded -= new EventHandler <DataLoadedEventArgs>(SearchManager_DataLoaded);
                            detailGrid.DisplayManager.SearchManager.DataLoaded += new EventHandler <DataLoadedEventArgs>(SearchManager_DataLoaded);
                        }

                        detailGrid.DisplayManager.SearchManager.LoadDataAccordSearchControls();
                    }

                    // 不能直接设置,需要在查找完成后设置
                    //dmParent.Position = oldPos;
                }
                finally
                {
                    dmParent.EndBatchOperation();
                    //detailGrid.Visible = (detailGrid.DataRows.Count != 0);
                }
            }
        }
        /// <summary>
        /// AddDetailGrid
        /// </summary>
        /// <param name="grid"></param>
        /// <param name="detailGrid"></param>
        public static void AddDetailGrid(this IBoundGridWithDetailGridLoadOnDemand grid, DataBoundDetailGrid detailGrid)
        {
            GridAddDataRowExtention.AddDetailGrid(grid, detailGrid);

            detailGrid.CollapsedChanged -= new EventHandler(detailGrid_CollapsedChanged);
            detailGrid.CollapsedChanged += new EventHandler(detailGrid_CollapsedChanged);
        }