Example #1
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);
        }
        internal static void OnCurrentRowChanged(IBoundGrid grid)
        {
            if (!(grid.CurrentRow is Xceed.Grid.DataRow))
            {
                return;
            }

            if (grid.DisplayManager.InBatchOperation)
            {
                return;
            }

            DataUnboundDetailGrid detailGrid = null;
            bool setNewCurrentRow            = false;

            try
            {
                grid.DisplayManager.BeginBatchOperation();

                if (grid.CurrentRow != null)
                {
                    detailGrid = grid.CurrentRow.ParentGrid as DataUnboundDetailGrid;
                }
                if (detailGrid == null)
                {
                    setNewCurrentRow = DataUnboundGrid.TryChangeCurrentRow(grid.DisplayManager, grid);
                }
                else
                {
                    setNewCurrentRow = DataUnboundGrid.TryChangeCurrentRow(detailGrid.DisplayManager, detailGrid);
                }
            }
            finally
            {
                grid.DisplayManager.EndBatchOperation();

                if (detailGrid == null)
                {
                    // 已经触发过了
                    //// CurrentRow改变了
                    //if (setNewCurrentRow)
                    //{
                    //    grid.DisplayManager.OnPositionChanged(System.EventArgs.Empty);
                    //}
                }
            }
        }
        /// <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;
        }
        // 必定是DisplayManager接管,不可编辑
        internal static void GenerateDetailGrids(IBoundGrid masterGrid, WindowTabInfo masterTabInfo)
        {
            if (masterTabInfo.ChildTabs.Count == 0)
                return;

            if (!(masterGrid is IBoundGridWithDetailGridLoadOnDemand))
            {
                throw new ArgumentException("Grid With DetailGrid must be IBoundGridWithDetailGridLoadOnDemand");
            }

            IDisplayManager masterDm = masterGrid.DisplayManager;
            foreach (WindowTabInfo subTabInfo in masterTabInfo.ChildTabs)
            {
                if (subTabInfo.IsInGrid)
                {
                    ISearchManager subSm = ServiceProvider.GetService<IManagerFactory>().GenerateSearchManager(subTabInfo, masterDm);

                    IDisplayManager subDm;
                    if (!string.IsNullOrEmpty(subTabInfo.DisplayManagerClassName))
                    {
                        subDm = ServiceProvider.GetService<IManagerFactory>().GenerateDisplayManager(subTabInfo, subSm);
                    }
                    else
                    {
                        subDm = (ServiceProvider.GetService<IManagerFactory>().GenerateControlManager(subTabInfo, subSm)).DisplayManager;
                    }
                    subDm.Name = subTabInfo.Name;

                    // IBoundGridWithDetailGridLoadOnDemand
                    DataUnboundDetailGrid detailGrid = new DataUnboundDetailGrid();
                    detailGrid.SetDisplayManager(subDm, subTabInfo.GridName);
                    ((IBoundGridWithDetailGridLoadOnDemand)masterGrid).AddDetailGrid(detailGrid);

                    GenerateDetailGrids(detailGrid, subTabInfo);
                }
            }
        }