/// <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); } } }