C1DataGrid单元格合并问题
之前发帖问了C1DataGrid(C1.WPF.DataGrid)单元格合并问题,并使用MergeHelper类实现了合并效果(http://gcdn.gcpowertools.com.cn/showtopic.aspx?topicid=16349&typeid=36),现在碰到新的问题:1.如下图红框所示,表头合并时,默认居左;如何使其居中?
2.如下图所示效果,第1列姓名不同,第2列部门相同,如何让第2列按照第1列所合并的行数来进行合并,而不是将第2列合并为1个单元格?
回复 1楼CanYou8的帖子
谢谢您的反馈。
对于您的问题,请参考如下:
1.合并ColumnHeader的位置HorizontalContentAlignment属性设置为Center。
参考代码:
<!-- Column header style -->
<Style x:Key="C1ColumnHeader" TargetType="c1:DataGridColumnHeaderPresenter">
<Setter Property="HorizontalContentAlignment" Value="Center" />
</Style>
<Style TargetType="c1:C1DataGrid">
<Setter Property="ColumnHeaderStyle" Value="{StaticResource C1ColumnHeader}"/>
</Style>
2.MergingHelper.cs 文件是一个为DataGrid创建的继承合并逻辑的自定义类。
对于您的自定义逻辑,默认的合并功能无法实现。
从您的图片来看,您是有特定的合并逻辑,我觉得您并不需要MergeHelper。您可以使用MergingCells事件来合并您期望合并的区域。
例如:
c1DataGrid1.MergingCells += (s, e) =>
{
var _grid = s as C1DataGrid;
var _mergeList = new List<DataGridCellsRange>();
//此处添加您想要合并的区域,写自己的合并逻辑
_mergeList.Add(new DataGridCellsRange(_grid.GetCell(0, 0), _grid.GetCell(1, 0)));
foreach (var range in _mergeList)
{
e.Merge(range);
}
};
columnheader的文字居中也可以通过LoadedCellPresenter事件完成。
c1DataGrid1.LoadedCellPresenter += (s, e) =>
{
if (e.Cell.Presenter.Content is DataGridColumnHeaderPresenter)
{
var cc = (e.Cell.Presenter.Content as ContentControl);
var tb = cc.Content as TextBlock;
tb.TextAlignment = TextAlignment.Center;
tb.HorizontalAlignment = HorizontalAlignment.Center;
}
};
第1个问题已看到效果,非常感谢!
第2个问题,用MergingCells事件写自己的合并逻辑时,要将需合并的单元格通过rowIndex、columnIndex来定位;如果DataGrid中的数据是固定的就好办了,但是列表中数据不固定要如何处理呢?比如若要适用于下图所示两种可能的情况,要如何处理呢?
回复 3楼CanYou8的帖子
谢谢反馈。
使用MergingCells需要自己写逻辑。
从您的需求来看,首先需要自己去获取该列每个单元格的值,然后判断相同的值做合并。
通过DataGrid.Value就可以获取到该单元格的值。 好 谢谢 回复 5楼CanYou8的帖子
不用客气。
页:
[1]