Example #1
0
        /// <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));
                }
            }
        }
Example #2
0
        //绑定到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);
            }
        }