找回密码
 立即注册

QQ登录

只需一步,快速开始

wangmj

论坛元老

14

主题

44

帖子

1万

积分

论坛元老

积分
10158

活字格认证

wangmj
论坛元老   /  发表于:2015-5-4 14:02  /   查看:9664  /  回复:9
C1truedbgrid显示的数据是用Datatable直接绑定的。
因此当选择表格中的某一行时,可以用选择的当前的行号,从Datatable中把对应数据取出来。
但当进行分组后,在表格中选择某一行时,其行号和Datatable中的行号就不能一一对应了(原因是分组行也被默认为占用一个行号,而且分组展开和不展开对应的行号也是不一样的)
例如:


    分组前 我选择日期为2015/01/14的数据的时候(对应的物理行号应该为0),  选择的行在Datatable对应的数据行号也为0,通过datatable.Rows(0) 便可以取得选中的数据内容
    分组后 我选择日期为2015/01/14的数据的时候(对应的物理行号为1,因为【Ando类别:设备】行也占用一个行号(0),如上图), 这时如何通过选择的行,从Datatable中把对应的数据取得呢?

也就是说分组后,显示的数据行,如何能与绑定的Datatable中的数据行对应上(因为我要在后台对选中的行数据进行编辑)。

本帖子中包含更多资源

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

x

9 个回复

倒序浏览
Alice
社区贡献组   /  发表于:2015-5-4 16:38:00
沙发
回复 1楼wangmj的帖子

感谢提供相关的图片以及详细的说明。
根据你的描述,你需要通过选择行获取在数据源里的行。
C1TrueDBGrid里有提供DataRowIndex属性可以获取到数据源的行号。
所以该问题,首选获取到选择的行以及行号,然后通过DataRowIndex获取到数据源的行号即可。
代码参考:
  1. int dataindex= this.c1TrueDBGrid1.Splits[0].Rows[this.c1TrueDBGrid1.SelectedRows[0]].DataRowIndex;
复制代码
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
wangmj
论坛元老   /  发表于:2015-5-5 08:58:00
板凳
回复 2楼Alice的帖子

Alice
     你好!
     非常感谢你对于此问题的回复。
     根据你的回复我试了一下,现在有个问题想和你再确认一下。就是我代码中的 me.c1TrueDBGrid1.Splits(0).Rows(this.c1TrueDBGrid1.SelectedRows(0)) 中 没有 DataRowIndex 的属性。不知道是不是我用的版本问题?
      我用的 Dll 是 C1.Win.C1TrueGrid4 (For Winform) 版本是 4.0.20131.61298  运行版本是 V4.0.30319
      如果是版本的问题,那么这个版本是否有对应取DataRowIndex的方式呢?
      期待你的回复!谢谢!
回复 使用道具 举报
Alice
社区贡献组   /  发表于:2015-5-5 12:12:00
地板
回复 3楼wangmj的帖子

你好。
DataRowIndex属性的命名空间是C1.Win.C1TrueDBGrid.BaseGrid, 类是ViewRow。
ViewRow.DataRowIndex是在2013V2版本添加。

对于没有提供这个属性的版本,你可以根据需要考虑如下的建议:
1.你的项目有升级的需求,升级到新版以获取更方便的方式。
2.自己写代码去实现这个需求。基本思路就是获取row.RowType判断不是 RowTypeEnum.DataRow,如果是,获取到这个数据行,然后到数据源里用代码进行查找。

另外,对于版本升级,目前的最新版是2015V1,可以到官网如下地址获取最新版的试用版:
http://www.gcpowertools.com.cn/products/download.aspx?pid=3

评分

参与人数 1满意度 +5 收起 理由
wangmj + 5 非常感谢

查看全部评分

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

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
wangmj
论坛元老   /  发表于:2015-5-5 14:32:00
5#
回复 4楼Alice的帖子

Alice
      非常感谢你的回复。
      以上的问题我了解了。
      再次感谢!
回复 使用道具 举报
Alice
社区贡献组   /  发表于:2015-5-5 17:37:00
6#
回复 5楼wangmj的帖子

不用客气。


为了给你提供更优质的服务,请对本次服务进行评分。我们会认真对待你提出的宝贵意见,谢谢        
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
wangmj
论坛元老   /  发表于:2015-5-6 10:19:00
7#
回复 6楼Alice的帖子

Alice 你好!
      根据你的回复,我将控件的版本进行了升级,你提供的代码属性已经找到了。
我测试了一下。还是有点问题想麻烦你再次确认一下。
      现在分组后是能够取得表格对应数据行的行号了,但因为分组后数据被进行了重新排序,因此这时取得的数据行号已经不能和源Datatable中的行号对应上了,因此是否有别的方式能够通过分组后表格中选中的行查找到对应的源Datatable中的数据呢?
      或者 能否在代码中取得分组后表格中选中的数据行的内容呢?
      因为项目原因,我刚接触该控件,所以问的不恰当的地方还望见谅!
回复 使用道具 举报
Alice
社区贡献组   /  发表于:2015-5-6 15:30:00
8#
回复 7楼wangmj的帖子

如果grid排序或是过滤,它使用DataSource和DataMember的Dataview。为了在排序或是过滤后,获取到这个row index的DataRow,可以使用如下的代码:

  1. Visual Basic
  2. If Me.C1TrueDBGrid1.FocusedSplit.Rows(Me.C1TrueDBGrid1.Row).RowType = C1.Win.C1TrueDBGrid.RowTypeEnum.DataRow Then
  3.     Dim dr As System.Data.DataRowView = CType(Me.C1TrueDBGrid1(Me.C1TrueDBGrid1.RowBookmark(Me.C1TrueDBGrid1.Row)), System.Data.DataRowView)
  4. End If
复制代码

  1. C#
  2. if (this.c1TrueDBGrid1.FocusedSplit.Rows[this.c1TrueDBGrid1.Row].RowType == C1.Win.C1TrueDBGrid.RowTypeEnum.DataRow)
  3. {
  4.     System.Data.DataRowView dr = (System.Data.DataRowView)this.c1TrueDBGrid1[this.c1TrueDBGrid1.RowBookmark(this.c1TrueDBGrid1.Row)];
  5. }
复制代码

评分

参与人数 1满意度 +5 收起 理由
wangmj + 5 非常感谢你的回复!

查看全部评分

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

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
wangmj
论坛元老   /  发表于:2015-5-6 16:44:00
9#
回复 8楼Alice的帖子

Alice
      非常感谢你的回复!
回复 使用道具 举报
Alice
社区贡献组   /  发表于:2015-5-6 17:03:00
10#
回复 9楼wangmj的帖子

不用客气。
为了给你提供更优质的服务,请对本次服务进行评分。我们会认真对待你提出的宝贵意见,谢谢        
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

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