使用treelsit时我们可能会应用到给标题换行,如果涉及到多级标题呢?类似于:
直接使用treelist.bands只能获取到一级标题,也就是表中预算收入band,不能获取到二级标题 预算收入工程直接费 和 三级标题 人工费 等!
解决方案:
遍历bands,得到一级标题,在通过bands子集去判断是否还有子子集,也就是用递归去取所有band!
这是实现思路!代码我实现了一个公共方法!
1.设置bands或者columns 的caption换行处添加一个转义字符或者使用特殊字符来做换行处理!(此处使用为特殊字符:※ 可自定)
例:
2.只需要传入treelist即可!
代码:
/// <summary>
/// 设置treelist标题换行
/// </summary>
/// <param name="treeList"></param>
public static void SetTreelistBandRow(TreeList treeList)
{
List<TreeListBand> listBands = new List<TreeListBand>();
if (treeList.Bands.Count() > 0)//有bands在执行
{
treeList.BandPanelRowHeight = 40;
foreach (TreeListBand band in treeList.Bands)
{
GetBands(band, listBands);
}
if (listBands.Count > 0)
{
foreach (TreeListBand item in listBands)
{
if (item.Caption.IndexOf("※") > 0)
{
item.AppearanceHeader.TextOptions.WordWrap = DevExpress.Utils.WordWrap.Wrap;
item.AppearanceHeader.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center;
string bandcaption = item.Caption.Replace("※", "\n");
item.Caption = bandcaption;
}
}
}
return;
}
if (treeList.Columns.Count() > 0)//有Columns在执行
{
treeList.ColumnPanelRowHeight = 50;
foreach (TreeListColumn col in treeList.Columns)
{
if (col.Caption.IndexOf("※") > 0)
{
col.AppearanceHeader.TextOptions.WordWrap = DevExpress.Utils.WordWrap.Wrap;
col.AppearanceHeader.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center;
string bandcaption = col.Caption.Replace("※", "\n");
col.Caption = bandcaption;
}
}
}
}
/// <summary>
/// 递归获取bands集合
/// </summary>
/// <param name="band"></param>
/// <param name="listBands"></param>
public static void GetBands(TreeListBand band, List<TreeListBand> listBands)
{
listBands.Add(band);
if (band.Bands.Count() > 0)
{
foreach (TreeListBand item in band.Bands)
{
GetBands(item, listBands);
}
}
}
注意:如果出现标题文本位置在单元格偏上则说明行高设置的不够!
调用:
SetTreelistBandRow(treelist);