//获取动态配置的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);
        }
Esempio n. 4
0
        //编辑一般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);
        }