找回密码
 立即注册

QQ登录

只需一步,快速开始

CanYou8

银牌会员

67

主题

191

帖子

2047

积分

银牌会员

积分
2047

活字格认证微信认证勋章元老葡萄

CanYou8
银牌会员   /  发表于:2015-11-24 11:13  /   查看:6041  /  回复:5
之前发帖问了C1DataGrid(C1.WPF.DataGrid)单元格合并问题,并使用MergeHelper类实现了合并效果(http://gcdn.gcpowertools.com.cn/ ... 9&typeid=36),现在碰到新的问题:
1.如下图红框所示,表头合并时,默认居左;如何使其居中?

2.如下图所示效果,第1列姓名不同,第2列部门相同,如何让第2列按照第1列所合并的行数来进行合并,而不是将第2列合并为1个单元格?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

5 个回复

倒序浏览
Alice
社区贡献组   /  发表于:2015-11-24 14:02:00
沙发
回复 1楼CanYou8的帖子

谢谢您的反馈。
对于您的问题,请参考如下:
1.合并ColumnHeader的位置HorizontalContentAlignment属性设置为Center。
参考代码:
  1. <!-- Column header style -->
  2. <Style x:Key="C1ColumnHeader" TargetType="c1:DataGridColumnHeaderPresenter">
  3. <Setter Property="HorizontalContentAlignment" Value="Center" />
  4. </Style>
复制代码
  1. <Style TargetType="c1:C1DataGrid">
  2. <Setter Property="ColumnHeaderStyle" Value="{StaticResource C1ColumnHeader}"/>
  3. </Style>
复制代码


2.MergingHelper.cs 文件是一个为DataGrid创建的继承合并逻辑的自定义类。
对于您的自定义逻辑,默认的合并功能无法实现。
从您的图片来看,您是有特定的合并逻辑,我觉得您并不需要MergeHelper。您可以使用MergingCells事件来合并您期望合并的区域。
例如:
  1. c1DataGrid1.MergingCells += (s, e) =>
  2. {
  3.   var _grid = s as C1DataGrid;
  4.   var _mergeList = new List<DataGridCellsRange>();
  5. //此处添加您想要合并的区域,写自己的合并逻辑
  6.   _mergeList.Add(new DataGridCellsRange(_grid.GetCell(0, 0), _grid.GetCell(1, 0)));                                       
  7.     foreach (var range in _mergeList)
  8.      {
  9.        e.Merge(range);
  10.      }
  11. };
复制代码


columnheader的文字居中也可以通过LoadedCellPresenter事件完成。
  1. c1DataGrid1.LoadedCellPresenter += (s, e) =>
  2. {
  3.   if (e.Cell.Presenter.Content is DataGridColumnHeaderPresenter)
  4.   {
  5.    var cc = (e.Cell.Presenter.Content as ContentControl);
  6.    var tb = cc.Content as TextBlock;
  7.    tb.TextAlignment = TextAlignment.Center;
  8.    tb.HorizontalAlignment = HorizontalAlignment.Center;                  
  9.   }
  10. };
复制代码
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
CanYou8
银牌会员   /  发表于:2015-11-25 14:15:00
板凳
第1个问题已看到效果,非常感谢!
第2个问题,用MergingCells事件写自己的合并逻辑时,要将需合并的单元格通过rowIndex、columnIndex来定位;如果DataGrid中的数据是固定的就好办了,但是列表中数据不固定要如何处理呢?比如若要适用于下图所示两种可能的情况,要如何处理呢?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 使用道具 举报
Alice
社区贡献组   /  发表于:2015-11-25 16:37:00
地板
回复 3楼CanYou8的帖子

谢谢反馈。
使用MergingCells需要自己写逻辑。
从您的需求来看,首先需要自己去获取该列每个单元格的值,然后判断相同的值做合并。
通过DataGrid[row,column].Value就可以获取到该单元格的值。
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
CanYou8
银牌会员   /  发表于:2015-11-27 21:29:00
5#
好 谢谢
回复 使用道具 举报
Alice
社区贡献组   /  发表于:2015-11-30 09:14:00
6#
回复 5楼CanYou8的帖子

不用客气。
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部