/// <summary> /// 把数据绑定到XtraGrid 控件中。 /// </summary> /// <param name="xtraGrid"></param> /// <param name="dataSource"></param> /// <param name="colPropertys"></param> /// <param name="imageDockRow"></param> /// <param name="editCols"></param> /// <returns></returns> public bool BindingToXtraGrid(DevExpress.XtraGrid.GridControl xtraGrid, object dataSource, Dictionary <string, MB.WinBase.Common.ColumnPropertyInfo> colPropertys, Dictionary <string, MB.WinBase.Common.ColumnEditCfgInfo> editCols, string xmlFileName, bool imageDockRow) { using (MB.Util.MethodTraceWithTime trace = new MB.Util.MethodTraceWithTime("MB.XWinLib.XtraGrid.XtraGridHelper.BindingToXtraGrid", xmlFileName)) { try { MB.WinBase.Common.GridViewLayoutInfo gridViewLayoutInfo = null; #region 根据GridViewLayoutInfo的配置来决定GridView的类型,甚至动态创建GridView if (!string.IsNullOrEmpty(xmlFileName)) { gridViewLayoutInfo = MB.WinBase.LayoutXmlConfigHelper.Instance.GetGridColumnLayoutInfo(xmlFileName, GRID_VIEW_LAYOUT_NAME); //首先看是否配置为DefaultGridView,如果是,则不做任何事情 if (gridViewLayoutInfo == null || gridViewLayoutInfo.GridLayoutColumns == null) { //如果没有配置DefaultGridView,则看是否有配置其他的GridView gridViewLayoutInfo = MB.WinBase.LayoutXmlConfigHelper.Instance.GetGridColumnLayoutInfo(xmlFileName, string.Empty); if (gridViewLayoutInfo != null && gridViewLayoutInfo.GridLayoutColumns != null) { if (gridViewLayoutInfo.GridViewType == WinBase.Common.GridViewType.AdvBandedGridView) { //动态创建AdvBandedGridView DevExpress.XtraGrid.Views.BandedGrid.AdvBandedGridView advBandedView = new DevExpress.XtraGrid.Views.BandedGrid.AdvBandedGridView(xtraGrid); xtraGrid.MainView = advBandedView; } } } } #endregion string viewTypeName = xtraGrid.MainView.GetType().Name; if (viewTypeName == "GridView") { return(createGridView(xtraGrid, dataSource, colPropertys, imageDockRow, editCols, gridViewLayoutInfo)); } else { XtraGridEditHelper.Instance.CreateEditBandXtraGrid(new GridDataBindingParam(xtraGrid, dataSource), colPropertys, editCols, gridViewLayoutInfo); return(true); } } catch (Exception ex) { throw MB.Util.APPExceptionHandlerHelper.PromoteException(ex, string.Format("通过XML文件{0}绑定XtraGrid 出错", xmlFileName)); } } }
//绑定到GridView 数据源。 private bool createGridView(DevExpress.XtraGrid.GridControl xtraGrid, object dataSource, Dictionary <string, MB.WinBase.Common.ColumnPropertyInfo> colPropertys, bool imageDockRow, Dictionary <string, MB.WinBase.Common.ColumnEditCfgInfo> editCols, MB.WinBase.Common.GridViewLayoutInfo gridViewLayoutInfo) { object pictureEdit; MB.XWinLib.XtraGrid.GridControlEx grdEx = xtraGrid as MB.XWinLib.XtraGrid.GridControlEx; if (grdEx != null) { grdEx.ShowOptionMenu = true; if (grdEx.ContextMenu == null) { grdEx.ReSetContextMenu(XtraContextMenuType.SaveGridState | XtraContextMenuType.Export | XtraContextMenuType.ColumnsAllowSort | XtraContextMenuType.Copy | XtraContextMenuType.Chart); } } if (xtraGrid.RepositoryItems.Count > 0) { if (imageDockRow) { pictureEdit = xtraGrid.RepositoryItems[0] as DevExpress.XtraEditors.Repository.RepositoryItemPictureEdit; } else { pictureEdit = xtraGrid.RepositoryItems[0] as DevExpress.XtraEditors.Repository.RepositoryItemImageEdit; } } else { if (imageDockRow) { pictureEdit = new DevExpress.XtraEditors.Repository.RepositoryItemPictureEdit(); (pictureEdit as DevExpress.XtraEditors.Repository.RepositoryItemPictureEdit).SizeMode = DevExpress.XtraEditors.Controls.PictureSizeMode.Zoom; } else { pictureEdit = new DevExpress.XtraEditors.Repository.RepositoryItemImageEdit(); } if (imageDockRow) { xtraGrid.RepositoryItems.Add(pictureEdit as DevExpress.XtraEditors.Repository.RepositoryItemPictureEdit); } else { xtraGrid.RepositoryItems.Add(pictureEdit as DevExpress.XtraEditors.Repository.RepositoryItemImageEdit); } } DevExpress.XtraGrid.Views.Grid.GridView gridView = xtraGrid.MainView as DevExpress.XtraGrid.Views.Grid.GridView; XtraGridViewHelper.Instance.SetGridView(gridView, colPropertys); XtraGridViewHelper.Instance.CreateViewColumns(xtraGrid, dataSource, colPropertys, pictureEdit, editCols, gridViewLayoutInfo); //if (colPropertys != null) { // XtraGridViewHelper.Instance.SetGroupSummary(gridView, colPropertys); //} //增加保存Grid UI 操作状态而增加的。 XtraGridViewHelper.Instance.RestoreXtraGridState(xtraGrid); DataView dv = MB.Util.MyConvert.Instance.ToDataView(dataSource, null); if (dv != null) { xtraGrid.DataSource = dv; } else { xtraGrid.DataSource = dataSource; } return(true); }
/// <summary> /// 创建 Xtra Grid 的column。 /// /// </summary> /// <param name="grdCtl"></param> /// <param name="dataSource"></param> /// <param name="colPropertys"></param> /// <param name="repositoryPicEdit"></param> /// <param name="editCols"></param> public void CreateViewColumns(DevExpress.XtraGrid.GridControl xtraGrid, object dataSource, Dictionary<string, MB.WinBase.Common.ColumnPropertyInfo> colPropertys, object repositoryPicEdit, Dictionary<string, MB.WinBase.Common.ColumnEditCfgInfo> editCols, MB.WinBase.Common.GridViewLayoutInfo gridViewLayoutInfo) { DevExpress.XtraGrid.Views.Grid.GridView gridView = xtraGrid.MainView as DevExpress.XtraGrid.Views.Grid.GridView; bool isPic = (repositoryPicEdit != null && string.Compare(repositoryPicEdit.GetType().Name, "RepositoryItemPictureEdit", true) == 0); if (gridView.Columns.Count > 0) { gridView.Columns.Clear(); if(xtraGrid is GridControlEx) { var gridControlEx=xtraGrid as GridControlEx; gridControlEx.OnDefaultViewColumnsCleared(); } } SetGridView(gridView, colPropertys); //先清空原先的设置信息,第一个为默认创建的 if (xtraGrid.RepositoryItems.Count > 1) { for (int i = 1; i < xtraGrid.RepositoryItems.Count; i++) { xtraGrid.RepositoryItems.RemoveAt(i); } } foreach (MB.WinBase.Common.ColumnPropertyInfo colInfo in colPropertys.Values) { if (!colInfo.Visibled) continue; if (dataSource != null) { IList lstData = dataSource as IList; if (lstData != null) { if (lstData.Count > 0) { object entity = lstData[0]; //虽然是IList但是这个LIST里面其实是DataSet if (entity is DataRowView) { DataTable dtData = MB.Util.MyConvert.Instance.ToDataTable(dataSource, string.Empty); if (dtData != null) { if (!dtData.Columns.Contains(colInfo.Name)) continue; } } else if (!MB.Util.MyReflection.Instance.CheckObjectExistsProperty(entity, colInfo.Name)) continue; } } else { DataTable dtData = MB.Util.MyConvert.Instance.ToDataTable(dataSource, string.Empty); if (dtData != null) { if (!dtData.Columns.Contains(colInfo.Name)) continue; } } } DevExpress.XtraGrid.Columns.GridColumn col = gridView.Columns.Add(); //默认情况下,先把Byte[] 类型 if (string.Compare(colInfo.DataType, "System.Byte[]", true) == 0) { col.ColumnEdit = repositoryPicEdit as DevExpress.XtraEditors.Repository.RepositoryItem; } else if (string.Compare(colInfo.DataType, "System.DateTime", true) == 0 || string.Compare(colInfo.DataType, "System.DateTime?", true) == 0) { DevExpress.XtraEditors.Repository.RepositoryItemDateEdit dateItem = new DevExpress.XtraEditors.Repository.RepositoryItemDateEdit(); dateItem.NullDate = DateTime.MinValue; dateItem.NullText = string.Empty; col.ColumnEdit = dateItem as DevExpress.XtraEditors.Repository.RepositoryItem; } else { if (editCols != null && editCols.Count > 0 && editCols.ContainsKey(colInfo.Name)) { MB.WinBase.Common.ColumnEditCfgInfo editIno = editCols[colInfo.Name]; if (editIno != null) { DevExpress.XtraEditors.Repository.RepositoryItem rItem = XtraGridEditHelper.Instance.CreateEditItemByEditInfo(editIno, colInfo.DataType); //设置它们的编辑项为只读的状态。这点很重要,因为创建可编辑的网格控件是通过 XtraGridEditHelper 来创建的。 //这里它只能是只读的。 rItem.ReadOnly = true; // rItem.AllowFocused = true; col.ColumnEdit = rItem; xtraGrid.RepositoryItems.Add(rItem); } } } SetColumn(col, colInfo); if (gridViewLayoutInfo != null && gridViewLayoutInfo.GridLayoutColumns != null) { var layoutInfo = gridViewLayoutInfo.GridLayoutColumns.FirstOrDefault<MB.WinBase.Common.GridColumnLayoutInfo>(o => o.Name == colInfo.Name); if (layoutInfo != null) { XtraGridViewHelper.Instance.SetColumnDisplayFormat(col, colInfo, layoutInfo); } } } if (colPropertys != null) { SetGroupSummary(gridView, colPropertys); } }