找回密码
 立即注册

QQ登录

只需一步,快速开始

q406157290
高级会员   /  发表于:2015-8-24 13:07:00
11#
回复 10楼KNight的帖子

忘记了 给你说的这种事没有联动的效果 我这边是要实现选择行时跟别的联动

当拖拽的时候  我没有能控制住表头拖拽 时保持颜色
回复 使用道具 举报
KNight
中级会员   /  发表于:2015-8-24 15:32:00
12#
回复 11楼q406157290的帖子

没理解您表达的内容:-|
回复 使用道具 举报
q406157290
高级会员   /  发表于:2015-8-24 15:39:00
13#
回复 12楼KNight的帖子

表头可以拖拽着更换 顺序     
也就是DraggedColumn事件  
上面的比如SortedColumn中把SelecteItems设置回去  触发SelectionChanged后发现SelecteItems是设置的数目  
可是在DraggedColumn事件里做同样的处理  触发SelectionChanged后发现SelecteItems的数目是1  
这样导致选择多行的带背景色的数据  就变成只有一条数据带有背景色了
你有好办法解决这问题吗
回复 使用道具 举报
Alice
社区贡献组   /  发表于:2015-8-24 17:55:00
14#
回复 13楼q406157290的帖子

你好。
你的业务逻辑越复杂,你需要写的代码就越多,也就越复杂。
有关你整个逻辑方面的问题,我没有可以提供的帮助。

但我有个在排序、分组和过滤后保存住selection多选的方案,供你参考:


该方案就是抽出SaveSelection/RetainSelection的方法,对grid.Selection进行操作。在过滤、分组和排序前后都分别调用该方法进行保存选择和重置选择。

本帖子中包含更多资源

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

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

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
q406157290
高级会员   /  发表于:2015-8-25 08:27:00
15#
回复 14楼Alice的帖子

謝謝回复 拿你的demo 坐标头拖拽  以你的方式实现  还是无法保持颜色不变化  您有好的建议吗 就是表头拖拽 交换位置
回复 使用道具 举报
gw0506
超级版主   /  发表于:2015-8-25 17:22:00
16#
一样的思路,你在拖拽列头开始的事件里SaveSelection,拖拽完了RetainSelection。
回复 使用道具 举报
KNight
中级会员   /  发表于:2015-8-25 21:01:00
17#
回复 15楼q406157290的帖子

ColumnReordering中调用SaveSelection,在ColumnReordered中调用RetainSelection;:~ 看着为了一个需求,加了那么多事件,怪累人的......

:~ 突然发现,由C1FlexGrid变成DataGrid了......上面说的ColumnReordering和ColumnReordered事件是C1DataGrid的,C1FlexGrid的貌似照这个思路无法实现......
回复 使用道具 举报
q406157290
高级会员   /  发表于:2015-8-26 08:40:00
18#
回复 16楼gw0506的帖子

有写同样的方法  但是无法实现  请您自己试下
回复 使用道具 举报
q406157290
高级会员   /  发表于:2015-8-26 08:41:00
19#
回复 17楼KNight的帖子

谁说不是呢  为了一个背景色的设置要控制好多事件   如果能有别的简单的方法 谁还这么麻烦呢   只能说C1并没有想象中的那么好  而且我主要是针对C1FlexGrid 的  
C1FlexGrid  和C1DataGrid 事件也是有区别的
为了实现这么一个背景色的设置  用了这么多的事件   难道就没有别的方法了吗
回复 使用道具 举报
KNight
中级会员   /  发表于:2015-8-26 09:35:00
20#
回复 19楼q406157290的帖子

:-| 控件不是万能的......C1FlexGrid主要是在DraggedColumn事件之后又会触发SelectedChanged事件,所以想了如下解决办法:
除了加上之前的那些事件,把DataGrid的ColumnReordering事件和ColumnReordered事件换成C1FlexGrid的DraggingColumn事件和DraggedColumn事件,并仍在DraggingColumn事件里调用SaveSelection方法保存选中状态;然后在DraggedColumn事件里标记当前是拖动状态结束,并在C1FlexGrid的SelectedChanged事件里对该状态进行判断处理,如果为true则调用RetainSelection方法回复选中状态即可;
参考代码如下:
  1. List<int> hashCode = new List<int>();
  2. private bool m_DraggedFlag = false;
  3. public void SaveSelection()
  4. {
  5.         hashCode.Clear();
  6.         foreach (var info in flex.SelectedItems)
  7.         {
  8.                 hashCode.Add(info.GetHashCode());
  9.         }
  10. }
  11. public void RetainSelection()
  12. {
  13.         flex.SelectionChanged -= flex_SelectionChanged;
  14.         if (hashCode.Count > 0)
  15.         {
  16.                 flex.SelectedItems.Clear();
  17.         }
  18.         foreach (var row in flex.Rows)
  19.         {
  20.                 int code = row.DataItem.GetHashCode();
  21.                 if (hashCode.Contains(code))
  22.                 {
  23.                         row.Selected = true;
  24.                 }
  25.         }
  26.         flex.SelectionChanged += flex_SelectionChanged;
  27. }
  28. private void flex_DraggingColumn(object sender, CellRangeEventArgs e)
  29. {
  30.         SaveSelection();
  31. }
  32. private void flex_DraggedColumn(object sender, CellRangeEventArgs e)
  33. {
  34.         m_DraggedFlag = true;
  35. }
  36. private void flex_SelectionChanged(object sender, CellRangeEventArgs e)
  37. {
  38.         if (m_DraggedFlag)
  39.         {
  40.                 RetainSelection();
  41.                 m_DraggedFlag = false;
  42.         }
  43. }
复制代码


其他事件照旧,如果需要的话;

评分

参与人数 1金币 +500 满意度 +5 收起 理由
Alice + 500 + 5 太厲害了

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部