天天看點

C# Devexpress BandedGridView 動态建立多行表頭的方法

作者:宜城公子羽

動态建立BandedGridViewd表頭的方法

public List<string> listBillGroup = new List<string>();
        /// <summary>
        /// 設定BandGrid樣式
        /// </summary>
        /// <param name="view">BandedGridView</param>
        /// <param name="ColumnConfigs">列配置資訊</param>
        /// <param name="separator">多表頭分隔符,分割符前文字顯示在第一行</param>
        public void SetBandColumns(BandedGridView view, List<ColumnConfig> ColumnConfigs, string separator = "|")
        {
            this.gridControl1.MainView = view;
            view.BeginUpdate(); //開始視圖的編輯,防止觸發其他事件
            view.BeginDataUpdate(); //開始資料的編輯         
            view.Columns.Clear();//清除所有列資訊
            view.Bands.Clear();//清除所有Band資訊

            //修改附加選項
            view.OptionsView.ShowFooter = true;                                             //顯示頁腳
            view.OptionsView.ShowColumnHeaders = false;                             //因為有Band列了,是以把ColumnHeader隐藏
            view.OptionsView.ShowGroupPanel = false;                                     //如果沒必要分組,就把它去掉
            view.OptionsView.EnableAppearanceEvenRow = false;                    //是否啟用偶數行外觀
            view.OptionsView.EnableAppearanceOddRow = true;                      //是否啟用奇數行外觀
            view.OptionsView.ShowFilterPanelMode = ShowFilterPanelMode.Never;    //是否顯示過濾面闆
            view.OptionsCustomization.AllowColumnMoving = false;                 //是否允許移動列

            //view.OptionsCustomization.AllowColumnResizing = true;              //是否允許調整列寬
            view.OptionsCustomization.AllowGroup = false;                               //是否允許分組
            view.OptionsCustomization.AllowFilter = true;                                  //是否允許過濾
            view.OptionsCustomization.AllowSort = false;                                   //是否允許排序
            view.OptionsSelection.EnableAppearanceFocusedCell = true;           //是否焦點顯示選中的單元格
            view.OptionsBehavior.Editable = false;                                                //是否允許使用者編輯單元格
            view.OptionsView.ColumnAutoWidth = false;                                     //是否自動顯示列寬
            view.OptionsView.ShowAutoFilterRow = true;                                    //是否自動顯示過濾條件

        
            foreach (var p in ColumnConfigs)
            {
                //如果不包含分隔符,直接建立列
                if (!p.Caption.Contains(separator))
                {
                    GridBand band = new GridBand() { Caption = p.Caption, Visible = p.Visible, ToolTip = p.ToolTip };
                    view.Bands.Add(band);
                    band.AppearanceHeader.TextOptions.HAlignment = HorzAlignment.Center;
                    band.AppearanceHeader.TextOptions.VAlignment = VertAlignment.Center;

                    BandedGridColumn col = new BandedGridColumn();
                    col.FieldName = p.FieldName;
                    col.Name = string.IsNullOrWhiteSpace(p.Name) ? "Col_" + p.FieldName : p.Name;
                    col.Tag = p.ID;
                    col.Caption = " ";
                    col.ToolTip = p.ToolTip;
                    col.Width = p.Width;
                    col.VisibleIndex = p.SortIndex;
                    col.Visible = p.Visible;
                    col.OptionsColumn.AllowEdit = p.AllowEdit;
                    col.GroupIndex = p.GroupIndex;
                    //标題對齊方式
                    col.AppearanceHeader.TextOptions.HAlignment = HorzAlignment.Center;
                    col.AppearanceHeader.TextOptions.VAlignment = VertAlignment.Center;
                    //單元格對齊方式
                    col.AppearanceCell.TextOptions.HAlignment = (HorzAlignment)p.Alignment;
                    col.AppearanceCell.Options.UseTextOptions = true;
                    col.AppearanceCell.Options.UseForeColor = true;
                    col.AppearanceCell.Options.UseBackColor = true;
                    if (p.BackColor != 0)
                        col.AppearanceCell.BackColor = Color.FromArgb(p.BackColor);
                    if (p.ForeColor != 0)
                        col.AppearanceCell.ForeColor = Color.FromArgb(p.ForeColor); ;

                    if (p.FooterType != (int)SummaryItemType.None)
                    {
                        var type = (SummaryItemType)p.FooterType;
                        col.SummaryItem.SetSummary(type, p.FooterFormatting);
                    }
                    if (p.FormatType != (int)FormatType.None)
                    {
                        col.DisplayFormat.FormatType = (FormatType)p.FormatType;
                        col.DisplayFormat.FormatString = p.FormatString;
                    }

                    if (p.AllowMerge)
                    {
                        col.OptionsColumn.AllowMerge = DefaultBoolean.True;//設定合并列
                        view.OptionsView.AllowCellMerge = true;
                    }
                    else
                        col.OptionsColumn.AllowMerge = DefaultBoolean.False;//不合并

                    if (p.Frozen)
                    {
                        col.Fixed = FixedStyle.MiddleLeft;
                        band.Fixed = FixedStyle.MiddleLeft;
                    }
                    else
                    {
                        col.Fixed = FixedStyle.None;
                        band.Fixed = FixedStyle.None;
                    }
                    col.OwnerBand = band;
                }
                else
                {
                    //有分隔符建立合并列,沒有分隔符建立普通列
                    string[] caption = p.Caption.Split(separator);
                    string bandCaption = caption[0];
                    string colCaption = caption[1];
                    GridBand band = new GridBand();
                    var bands = view.Bands.Where(x => x.Caption.Equals(bandCaption));
                    if (!bands.Any())
                    {
                        band = new GridBand() { Caption = bandCaption };
                        string[] method = p.FieldName.Split('_');
                        if (method.Length > 1)
                        {
                            string m1 = method[1];
                            band.Visible = listBillGroup.Contains(m1);
                        }
                        else
                            band.Visible = p.Visible;
                        view.Bands.Add(band);
                        band.AppearanceHeader.TextOptions.HAlignment = HorzAlignment.Center;
                        band.AppearanceHeader.TextOptions.VAlignment = VertAlignment.Center;
                    }
                    else
                    {
                        band = view.Bands.First(x => x.Caption.Equals(bandCaption));
                    }

                    GridBand childBand = new GridBand() { Caption = colCaption };
                    band.Children.Add(childBand);
                    childBand.AppearanceHeader.TextOptions.HAlignment = HorzAlignment.Center;
                    childBand.AppearanceHeader.TextOptions.VAlignment = VertAlignment.Center;

                    BandedGridColumn col = new BandedGridColumn();
                    col.FieldName = p.FieldName;
                    col.Name = string.IsNullOrWhiteSpace(p.Name) ? "Col_" + p.FieldName : p.Name;
                    col.Tag = p.ID;
                    col.ToolTip = p.ToolTip;
                    col.Caption = " "; 
                    col.Width = p.Width;
                    col.VisibleIndex = p.SortIndex;
                    col.Visible = p.Visible;
                    col.OptionsColumn.AllowEdit = p.AllowEdit;
                    col.GroupIndex = p.GroupIndex;
                    //标題對齊方式
                    col.AppearanceHeader.TextOptions.HAlignment = HorzAlignment.Center;
                    col.AppearanceHeader.TextOptions.VAlignment = VertAlignment.Center;
                    //單元格對齊方式
                    col.AppearanceCell.TextOptions.HAlignment = (HorzAlignment)p.Alignment;
                   //這三行是必須的,否則自定義單元格格式無效
                    col.AppearanceCell.Options.UseTextOptions = true;
                    col.AppearanceCell.Options.UseForeColor = true;
                    col.AppearanceCell.Options.UseBackColor = true;
                    if (p.BackColor != 0)
                        col.AppearanceCell.BackColor = Color.FromArgb(p.BackColor);
                    if (p.ForeColor != 0)
                        col.AppearanceCell.ForeColor = Color.FromArgb(p.ForeColor); ;
                    if (p.FooterType != (int)SummaryItemType.None)
                    {
                        var type = (SummaryItemType)p.FooterType;
                        col.SummaryItem.SetSummary(type, p.FooterFormatting);
                    }
                    if (p.FormatType != (int)FormatType.None)
                    {
                        col.DisplayFormat.FormatType = (FormatType)p.FormatType;
                        col.DisplayFormat.FormatString = p.FormatString;
                    }
                  //列是否合并
                    if (p.AllowMerge)
                        col.OptionsColumn.AllowMerge = DefaultBoolean.True;//設定合并列                                                                          
                    else
                        col.OptionsColumn.AllowMerge = DefaultBoolean.False;//不合并
                    //列是否當機
                    if (p.Frozen)
                    {
                        col.Fixed = FixedStyle.MiddleLeft;
                        childBand.Fixed = FixedStyle.MiddleLeft;
                    }
                    else
                    {
                        col.Fixed = FixedStyle.None;
                        childBand.Fixed = FixedStyle.None;
                    }
                    col.OwnerBand = childBand;
                }
            }
            view.EndDataUpdate();//結束資料的編輯
            view.EndUpdate();       //結束視圖的編輯
        }           

類資訊配置類

public class ColumnConfig : BaseEntity
    {
        /// <summary>
        /// 實體ID
        /// </summary>
        [DisplayName("實體ID"), ReadOnly(true)]
        public int TableSettingID { get; set; }

        /// <summary>
        /// 列名(可不設定)
        /// </summary>
        [DisplayName("列名"), Column(TypeName = Lenth40)]
        public string Name { get; set; }
        /// <summary>
        /// 綁定字段
        /// </summary>
        [DisplayName("字段名稱"), ReadOnly(true), Column(TypeName = Lenth40)]
        public string FieldName { get; set; }
        /// <summary>
        /// 标題
        /// </summary>
        [DisplayName("标題"), Column(TypeName = Lenth40)]
        public string Caption { get; set; }
        /// <summary>
        /// 提示資訊
        /// </summary>
        [DisplayName("提示資訊"), Column(TypeName = Lenth_100)]
        public string ToolTip { get; set; }

        /// <summary>
        /// 列寬(預設100)
        /// </summary>
        [DisplayName("列寬"), DefaultValue(100)]
        public int Width { get; set; } = 100;
        /// <summary>
        /// 設定列是否可編輯(預設可編輯)
        /// </summary>
        [DisplayName("允許編輯"), DefaultValue(true)]
        public bool AllowEdit { get; set; } = true;
        /// <summary>
        /// 顯示樣式 
        /// </summary>
        [DisplayName("顯示樣式"), Column(TypeName = Lenth40)]
        public string FormatString { get; set; }
        /// <summary>
        /// 分組:-1是不分組
        /// </summary>
        [DisplayName("分組索引"), DefaultValue(-1)]
        public int GroupIndex { get; set; } = -1;

        /// <summary>
        /// 是否當機
        /// </summary>
        [DisplayName("是否當機"), DefaultValue(false)]
        public bool Frozen { get; set; } = false;

        /// <summary>
        /// 設定列内容是否可合并
        /// </summary>
        [DisplayName("允許合并"), DefaultValue(false)]
        public bool AllowMerge { get; set; } = false;
        /// <summary>
        /// 是否可見
        /// </summary>
        [DisplayName("是否可見")]
        public bool Visible { get; set; }
        /// <summary>
        /// 是否視圖列
        /// </summary>
        [DisplayName("是否視圖列"), DefaultValue(false)]
        public bool IsLookupCol { get; set; }

        /// <summary>
        /// 格式化類型
        /// </summary>
        [DisplayName("格式化類型")]
        public int FormatType { get; set; }
 

        /// <summary>
        /// 參照視圖
        /// </summary>
        [DisplayName("參照視圖"), Column(TypeName = Lenth40)]
        public string ColumnEdit { get; set; }

        /// <summary>
        /// 頁腳類型
        /// </summary>
        [DisplayName("頁腳類型")]
        public int FooterType { get; set; }
        /// <summary>
        /// 頁腳格式
        /// </summary>
        [DisplayName("頁腳格式"), Column(TypeName = "nvarchar(50)")]
        public string FooterFormatting { get; set; }
        /// <summary>
        /// 對齊方式
        /// </summary>
        [DisplayName("對齊方式")]
        public int Alignment { get; set; }
    
        /// <summary>
        /// 單元格背景色
        /// </summary>
        public int BackColor { get; set; }
        /// <summary>
        /// 單元格前景色
        /// </summary>
        public int ForeColor { get; set; }
  
        /// <summary>
        /// 資料類型
        /// </summary>
        [DisplayName("資料類型")]
        public EnumRepositoryItem SourceType { get; set; }     
    }           

調用後長成這個樣子:

C# Devexpress BandedGridView 動态建立多行表頭的方法

繼續閱讀