找回密码
 立即注册

QQ登录

只需一步,快速开始

tysoft

中级会员

84

主题

214

帖子

678

积分

中级会员

积分
678

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

tysoft
中级会员   /  发表于:2015-10-19 16:30  /   查看:8165  /  回复:10
场景: 根据需求,我扩展了FlexGrid的功能,增加了一个多选行的功能;功能的实现方式是在将第0列变成bool值,勾选后算是选中此行,效果如图:


但是现在有一个BUG,当列重新排序时,勾选的行没有跟着原行一起走,如上图id =0和1的选中了,但当id按降序排序时,现在勾选的却不是0和1了


问一下这个问题 该如何解决

代码奉上

本帖子中包含更多资源

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

x

10 个回复

倒序浏览
Alice
社区贡献组   /  发表于:2015-10-19 17:27:00
沙发
回复 1楼tysoft的帖子

谢谢对该问题的反馈以及提供demo。
您的问题我们收到了,需要测试后才能给你反馈。
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
Alice
社区贡献组   /  发表于:2015-10-19 18:09:00
板凳
回复 1楼tysoft的帖子

对您的demo进行了测试,在demo中重现您的问题。但是demo您重写了flexgrid,并且绑定了数据源来展示数据。
您在重写的过程中,对列头和行头都进行了重新设置,建议检查是否在对rowheader的排序造成了影响。
另外,也请参考我们的随机安装示例:
\Documents\ComponentOne Samples\Studio for WinForms\ControlExplorer\FlexGrid
ColumnCellType文件,在此示例中,使用了CheckBox列,排序并不会影响到数值。
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
tysoft
中级会员   /  发表于:2015-10-20 14:15:00
地板
查看了你的例子,也结合了我的例子进行测试,你的例子中,Grid并没有绑定数据源。而是直接将数据填充到Grid中的,这种情况排序并不会影响。但是一般应用中,没有将数据直接填充到Grid中的,所以你的例子没有实用价值
回复 使用道具 举报
tysoft
中级会员   /  发表于:2015-10-20 14:18:00
5#
我想要的答案是: 能否在Fix列中加入 checkbox ,而不影响他的排序。因为现在 flexGrid中缺少这种选择方式
回复 使用道具 举报
Alice
社区贡献组   /  发表于:2015-10-20 15:20:00
6#
回复 5楼tysoft的帖子

你好。
不管是否绑定数据源,默认的排序都是进行整行排序,不会是行中某些单元格进行排序。
数据绑定,并且测试排序,不能重现你的问题,测试代码如下:
  1. DataTable dt = new DataTable();
  2.             DataColumn c = new DataColumn();
  3.             c.ColumnName = "ID";
  4.             c.DataType = typeof(string);
  5.             dt.Columns.Add(c);

  6.             c = new DataColumn();
  7.             c.DataType = typeof(string);
  8.             c.ColumnName = "Item";
  9.             dt.Columns.Add(c);

  10.             c = new DataColumn();
  11.             c.DataType = typeof(bool);
  12.             c.ColumnName = "checkbox";
  13.             dt.Columns.Add(c);

  14.             DataRow row;
  15.             for(int i=0;i<5;i++)
  16.             {

  17.                 dt.Rows.Add(new object[]{i,"item"+i.ToString(),false});
  18.             }

  19.             this.c1FlexGrid1.DataSource = dt;
复制代码
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
tysoft
中级会员   /  发表于:2015-10-20 15:29:00
7#
:t(  你把c.ColumnName = "checkbox";这一列放到数据源中,这种情况当然可行;但是在应用中,为了实现多选 而在数据源中增加一个bool值这一列,你不觉得太太太麻烦了吗?
回复 使用道具 举报
Alice
社区贡献组   /  发表于:2015-10-20 17:14:00
8#
回复 7楼tysoft的帖子

很抱歉没有理解您的意思。
根据您的描述,您需要在绑定的情况下创建非绑定的列。
由于c1flexgrid非为数据绑定和非绑定两种,在绑定的时候,如果创建一个非绑定的列(checkbox),这个列在数据源没有对应的字段,值是不能存储下来的。若是相对这个非绑定的列的值做get/set,就必须设定该值存储到什么地方。
基于这点,你在数据绑定的时候,将checkbox列放到了RowHeader,就是行头的区域。以便值能够存储下来。但是这是一个特别的列。RowHeader列是有固定顺序的,用来标记第一行到最后一行,因此不管你是否排序,它都会保持不变。(比如列头显示的是1,2,3......,排序后列头依然显示1,2,3......,按顺序标志第几行,而不会随意改变)。

建议您不要将checkbox放在行头,而是创建一个列,并且将值存到一个字段中。
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
Alice
社区贡献组   /  发表于:2015-10-28 16:41:00
9#
回复 7楼tysoft的帖子

请问问题解决了么?
为了给你提供更优质的服务,请对本次服务进行评分。我们会认真对待你提出的宝贵意见,谢谢        

您可以关注我们的微信服务号(微信号:GrapeCityDT),帖子有回复时可即时收到提醒,便于您第一时间查看,尽快解决技术问题。关注即可获得300金币用于兑换礼品。

评分

参与人数 1满意度 +5 收起 理由
tysoft + 5 ok

查看全部评分

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

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
tysoft
中级会员   /  发表于:2015-10-30 17:39:00
10#
解决了,用了一个UnbondColoum,将它放到第1列,然后用Get/SetUnboundValue 事件来同步选中的值

本帖子中包含更多资源

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

x

评分

参与人数 1金币 +300 收起 理由
Alice + 300 奖励金币

查看全部评分

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