//获取动态配置的GridBand private GridColumnLayoutInfo getDynamicBandSetting(List <GridColumnLayoutInfo> childColumnLayouts) { foreach (GridColumnLayoutInfo columnLayoutInfo in childColumnLayouts) { if (string.Compare(columnLayoutInfo.Type, XtraGridViewHelper.BAND_TYPE_NAME, true) == 0) { if (columnLayoutInfo.DynamicChild) { if (columnLayoutInfo.Childs.Count > 1) { throw new MB.Util.APPException("在获取动态列配置时,DynamicChild 的直系子列数只能有一个,如果存在多个列用一个Band 来包含"); } return(columnLayoutInfo); } else { GridColumnLayoutInfo info = getDynamicBandSetting(columnLayoutInfo.Childs); if (info != null) { return(info); } } } } return(null); }
// /// <summary> /// 重新设置动态GridLayoutInfo 的信息。 /// </summary> /// <param name="convertObject"></param> /// <param name="gridViewLayoutInfo"></param> /// <returns></returns> public GridViewLayoutInfo ResetDynamicColumnViewLayout(MB.WinBase.Data.HViewDataConvert <T> convertObject, GridViewLayoutInfo gridViewLayoutInfo) { List <GridColumnLayoutInfo> settingBands = new List <GridColumnLayoutInfo>(); getDynamicBandSettings(gridViewLayoutInfo.GridLayoutColumns, ref settingBands); //GridColumnLayoutInfo settingBand = getDynamicBandSetting(gridViewLayoutInfo.GridLayoutColumns); foreach (GridColumnLayoutInfo settingBand in settingBands) { if (settingBand == null || settingBand.Childs.Count == 0) { continue; } var dynamicColumns = convertObject.DynamicColumns; int index = 0; GridColumnLayoutInfo settingClone = settingBand.Childs[0].Clone() as GridColumnLayoutInfo; settingBand.Childs.Clear(); for (int colIndex = 0; colIndex < dynamicColumns.Count; colIndex++) { MB.WinBase.Data.DynamicColumnInfo colInfo = dynamicColumns[colIndex]; GridColumnLayoutInfo dynamicCol = (GridColumnLayoutInfo)settingClone.CloneWithoutChilds(); settingBand.Childs.Add(dynamicCol); if (string.Compare(dynamicCol.Type, XtraGridViewHelper.BAND_TYPE_NAME, true) == 0) { dynamicCol.Childs = new List <GridColumnLayoutInfo>(); foreach (GridColumnLayoutInfo child in settingClone.Childs) { GridColumnLayoutInfo childColumn = child.CloneWithoutChilds(); childColumn.Name = MB.WinBase.Data.HViewDataConvert.CreateDynamicColumnFieldName(childColumn.Name, colIndex); dynamicCol.Childs.Add(childColumn); } } else { dynamicCol.Name = MB.WinBase.Data.HViewDataConvert.CreateDynamicColumnFieldName(dynamicCol.Name, colIndex); } dynamicCol.Text = string.IsNullOrEmpty(colInfo.Caption) ? colInfo.ColumnValueCode : colInfo.Caption; dynamicCol.Index = dynamicCol.Index + index; index += 1; } } return(gridViewLayoutInfo); }
/// <summary> /// 创建动态列并带有动态Caption 的描述信息。 /// </summary> /// <param name="convertObject"></param> /// <param name="gridViewLayoutInfo"></param> public GridViewLayoutInfo ResetDynamicCaptionColumnViewLayout(MB.WinBase.Data.HViewDataConvert <T> convertObject, GridViewLayoutInfo gridViewLayoutInfo) { GridColumnLayoutInfo settingBand = getDynamicBandSetting(gridViewLayoutInfo.GridLayoutColumns); if (settingBand == null || settingBand.Childs.Count == 0) { return(gridViewLayoutInfo); } var dynamicColumns = convertObject.DynamicColumns; GridColumnLayoutInfo settingClone = settingBand.Childs[0].Clone() as GridColumnLayoutInfo; settingBand.Childs.Clear(); for (int index = 0; index < convertObject.DynamicColumnCount; index++) { GridColumnLayoutInfo dynamicCol = (GridColumnLayoutInfo)settingClone.CloneWithoutChilds(); settingBand.Childs.Add(dynamicCol); if (string.Compare(dynamicCol.Type, XtraGridViewHelper.BAND_TYPE_NAME, true) == 0) { dynamicCol.Childs = new List <GridColumnLayoutInfo>(); foreach (GridColumnLayoutInfo child in settingClone.Childs) { GridColumnLayoutInfo childColumn = child.CloneWithoutChilds(); childColumn.Name = MB.WinBase.Data.HViewDataConvert.CreateDynamicColumnFieldName(childColumn.Name, index); dynamicCol.Childs.Add(childColumn); } } else { dynamicCol.Name = MB.WinBase.Data.HViewDataConvert.CreateDynamicColumnFieldName(dynamicCol.Name, index); } //dynamicCol.Text = colInfo.Caption; dynamicCol.Index = dynamicCol.Index + index; } return(gridViewLayoutInfo); }
//编辑一般ViewGrid 格式 private bool editViewGrid(GridDataBindingParam bindParam, Dictionary <string, MB.WinBase.Common.ColumnPropertyInfo> objPropertys, Dictionary <string, MB.WinBase.Common.ColumnEditCfgInfo> editCols, MB.WinBase.Common.GridViewLayoutInfo gridViewLayoutInfo) { if (gridViewLayoutInfo != null) { MB.Util.TraceEx.Write("OK"); } DevExpress.XtraGrid.GridControl xtraGCtl = bindParam.XtraGrid; MB.XWinLib.XtraGrid.XtraGridViewHelper.Instance.SetEditGridAutoInfo(xtraGCtl); XtraGridViewHelper.Instance.SetXtraGridSkin(xtraGCtl, XtraGridSkin.Edit); DevExpress.XtraGrid.Views.Grid.GridView gridView = xtraGCtl.MainView as DevExpress.XtraGrid.Views.Grid.GridView; if (gridView == null) { throw new MB.Util.APPException("目前编辑的XtrGrid 只支持DevExpress.XtraGrid.Views.Grid.GridView的格式。请检查你设置的XtrGrid View是否为这种类型。"); } if (objPropertys == null || objPropertys.Count == 0) { throw new MB.Util.APPException("业务对象没有配置对应的XML文件Columns 信息。"); } // 设置控件的显示样式 XtraGridViewHelper.Instance.SetGridView(gridView, objPropertys); if (gridView.Columns.Count > 0) { gridView.Columns.Clear(); xtraGCtl.RepositoryItems.Clear(); } //根据业务处理对象得到对应的 UI 编辑设置信息。 int i = 0; foreach (MB.WinBase.Common.ColumnPropertyInfo fInfo in objPropertys.Values) { if (!fInfo.Visibled) { continue; } DevExpress.XtraGrid.Columns.GridColumn bdc = new DevExpress.XtraGrid.Columns.GridColumn(); //判断该列是否可以进行编辑 DevExpress.XtraEditors.Repository.RepositoryItem rEdit = null; if (editCols != null && editCols.ContainsKey(fInfo.Name)) { rEdit = CreateEditItemByEditInfo(editCols[fInfo.Name], fInfo.CanEdit, fInfo.DataType);//根据用户XML配置的信息获取一个编辑的列。 } else { rEdit = CreateEditItemByCol(fInfo, false); } rEdit.Name = fInfo.Name; bdc.ColumnEdit = rEdit; xtraGCtl.RepositoryItems.Add(rEdit); gridView.Columns.Add(bdc); GridColumnLayoutInfo layoutInfo = null; if (gridViewLayoutInfo != null && gridViewLayoutInfo.GridLayoutColumns.Count > 0) { layoutInfo = gridViewLayoutInfo.GridLayoutColumns.FirstOrDefault <MB.WinBase.Common.GridColumnLayoutInfo>(o => o.Name == fInfo.Name); } SetEditColumn(bdc, fInfo, layoutInfo, gridViewLayoutInfo); i++; } //不管什么时候都恢复保存的状态 XtraGridViewHelper.Instance.RestoreXtraGridState(bindParam.XtraGrid); if (objPropertys != null) { XtraGridViewHelper.Instance.SetGroupSummary(gridView, objPropertys); } xtraGCtl.DataSource = MB.Util.MyConvert.Instance.ToGridViewSource(bindParam.DataSource); setAllowFocusColumn(gridView); XtraContextMenuType viewPopuMenus = XtraContextMenuType.SaveGridState | XtraContextMenuType.Export | XtraContextMenuType.Delete | XtraContextMenuType.DataImport | XtraContextMenuType.ColumnsAllowSort | XtraContextMenuType.BatchAdd | XtraContextMenuType.QuickInput | XtraContextMenuType.ExcelEdit; //bool autoNewItem = gridViewLayoutInfo == null || !gridViewLayoutInfo.ReadOnly; XtraGridViewHelper.Instance.SetGridViewNewItem(xtraGCtl, true, viewPopuMenus); return(true); }