動态建立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; }
}
調用後長成這個樣子: