找回密码
 立即注册

QQ登录

只需一步,快速开始

zxc9089
中级会员   /  发表于:2015-11-10 10:29  /   查看:8049  /  回复:5

  1.                 <c1:DataGridRowHeaderColumn Header="[Country, Continent]" Binding="{Binding Continent}" />
  2.                 <c1:DataGridRowHeaderColumn Header="[Country, Name]" Binding="{Binding Country}" />

  3.                 <c1:DataGridTextColumn Header="[abc]" Binding="{Binding Fourth}" />
  4.                 <c1:DataGridTextColumn Header="[efg]" Binding="{Binding Fourth}" />
  5.                 <c1:DataGridTextColumn Header="[qwe]" Binding="{Binding Fourth}" />
  6.                 <c1:DataGridTextColumn Header="[asd]" Binding="{Binding Fourth}" />
  7.                 <c1:DataGridTextColumn Header="[Final, Champion]" Binding="{Binding First}" />
  8.                 <c1:DataGridTextColumn Header="[Final, Runner-up]" Binding="{Binding Second}" />
  9.                 <c1:DataGridTextColumn Header="[Semi-Finals, Third]" Binding="{Binding Third}" />
  10.                 <c1:DataGridTextColumn Header="[Semi-Finals, Fourth]" Binding="{Binding Fourth}" />
  11.                 <c1:DataGridTextColumn Header="[asd]" Binding="{Binding Fourth}" />
复制代码


之前 http://gcdn.gcpowertools.com.cn/showtopic-16377.html 中有demo样例,但是我把绑定的列更改成上面的代码后。发现在原始列前加的列可以自动合并,后面的就无法自动合并了,这个是什么问题呢? 运行结果如下:

本帖子中包含更多资源

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

x

5 个回复

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

谢谢您的反馈。
您的意思是图上的最后一列未进行自动合并?
根据您链接中的示例所示,在MainWinDow.xaml.cs文件中,初始化的时候会获取需要合并的行列的信息,合并的区域是从这里读取并merge的。
请问您有没有将您新添加的需要合并的列的信息添加到需要合并的range里?如果没有,根据逻辑代码,是不会合并的。
初始化保存合并信息的代码:
  1.             // save headers rows and columns for later
  2.             _headerRowColumns = grid.Columns.Take(3).ToArray();
  3. _headerColumnRows = grid.TopRows.Take(3).ToArray();[/
复制代码

合并时候获取信息的代码:
  1.   var nonHeadersViewportCols = grid.Viewport.Columns.Where(c =&gt; !_headerRowColumns.Contains(c)).ToArray();
  2.             var nonHeadersViewportRows = grid.Viewport.Rows.Where(r =&gt; !_headerColumnRows.Contains(r)).ToArray();
复制代码

请根据您的项目实际情况修改这些代码,谢谢。
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
zxc9089
中级会员   /  发表于:2015-11-10 14:03:00
板凳
回复 2楼Alice的帖子

  1. //获取grid中为行头的列
  2. _headerRowColumns = grid.Columns.Take(2).ToArray();
  3. //获取grid中为列头的Toprow
  4. _headerColumnRows = grid.TopRows.Take(2).ToArray();
复制代码


  1. //获取grid中出去列头行头的实际数据行列范围
  2. var nonHeadersViewportCols = grid.Viewport.Columns.Where(c =&gt; !_headerRowColumns.Contains(c)).ToArray();
  3. var nonHeadersViewportRows = grid.Viewport.Rows.Where(r =&gt; !_headerColumnRows.Contains(r)).ToArray();
复制代码



不知道针对于上面的个人理解注释是否正确?

那么:

  1. //合并前两行和从第三列开始以后的列的范围内单元格,如果出现相同的文本就合并
  2. foreach (var range in MergingHelper.Merge(System.Windows.Controls.Orientation.Vertical, _headerColumnRows, nonHeadersViewportCols, true))
  3. {
  4.      e.Merge(range);
  5. }
  6. //合并前两列和从第三行开始以后的行的范围内单元格,如果出现相同的文本就合并
  7. foreach (var range in MergingHelper.Merge(System.Windows.Controls.Orientation.Horizontal, nonHeadersViewportRows, _headerRowColumns, true))
  8. {
  9.      e.Merge(range);
  10. }
复制代码

这两段代码是不是就代表了合并以下红线标出区域的单元格?



那么里应当最后一列asd应该是在合并范围内的呀。

本帖子中包含更多资源

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

x
回复 使用道具 举报
Alice
社区贡献组   /  发表于:2015-11-10 15:20:00
地板
回复 3楼zxc9089的帖子

是的,您的理解是对的。

合并的基本方法就是在MergingCells事件里调用e.Merge方法,传入你需要合并的区域合并。
比如合并第五列的第一行和第二行,代码参考:
  1.   DataGridCell cell0 = grid[0, 5];
  2.             DataGridCell cell1 = grid[1, 5];
  3.             e.Merge(new DataGridCellsRange(cell0, cell1));
复制代码


您如果使用MergingHelper来完成合并,这个接口是根据之前给您的示例设计逻辑代码的,如果您修改了,也必须去修改MergingHelper类。请查看MergingHelper.cs文件的Merge的逻辑代码,它有去判断方向等各个因素在里面。

因此针对这个问题,您可以使用我提供给您的e.Merge方法去合并您所期望的行列。或者您去修改MergingHelper.cs文件的代码逻辑满足您的业务需求。
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
zxc9089
中级会员   /  发表于:2015-11-10 17:01:00
5#
问题已解决,详细阅读了下MergingHelper的代码逻辑,修改了合并方向,问题解决了。 谢谢了
回复 使用道具 举报
Alice
社区贡献组   /  发表于:2015-11-10 17:11:00
6#
回复 5楼zxc9089的帖子

解决的很快速。

非常感谢您的反馈。

评分

参与人数 1满意度 +5 收起 理由
zxc9089 + 5 问题已解决

查看全部评分

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

葡萄城控件服务团队

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