找回密码
 立即注册

QQ登录

只需一步,快速开始

bj_zm

中级会员

48

主题

169

帖子

713

积分

中级会员

积分
713

活字格认证微信认证勋章

bj_zm
中级会员   /  发表于:2014-7-30 10:45  /   查看:13805  /  回复:15
OlapEngine.GetDetail(row, col)
获取交叉点的明细。
列没有问题。行Selection.row 正常情况下也没问题。但是一排序,这个取得的行和绑定的OlapTable的行就不对应了,取数不正常。怎么取当前选中行能解决我说的这个问题?

15 个回复

倒序浏览
Alice
社区贡献组   /  发表于:2014-7-30 12:20:00
沙发
回复 1楼bj_zm的帖子

C1OlapGrid列排序之后取得的是更新后的,你得到的就是你看到的数据。
如果想数据源和OlapGrid之间查找数据,可以用主键查找,就是查找数据表里唯一的关键字,而不是用行号查找。
比如,你的数据源里有个ID字段,这个字段是主键,那么在数据展示和数据源之间查找数据,就应该依据ID字段。在C1OlapGrid里获取一行的ID字段的值,然后根据ID字段的值到绑定的OlapTable里查找相应的记录。

评分

参与人数 1满意度 +5 收起 理由
bj_zm + 5 alice很热心,有耐心。必须赞扬。

查看全部评分

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

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
bj_zm
中级会员   /  发表于:2014-7-30 15:11:00
板凳
回复 2楼Alice的帖子

主要是GetDetail 的参数,要的是C1.Silverlight.Data.DataRow
而C1OlapGrid。SelectedItem等当前选择项的方法,都得不到这个。所以我用了他返回了行号。
然后再要数据源里找 ,返回DataRow。不过就是界面排序了,而源没变,就对不上号了。
你刚才说的主键。不知道怎么弄。我的来源数据没有主键。
回复 使用道具 举报
Alice
社区贡献组   /  发表于:2014-7-30 18:47:00
地板
回复 3楼bj_zm的帖子

主键就是数据源里唯一的值,比如有个ID字段,并且这个字段在各个记录都是不同的。就可以用这个进行查找。有主键就比较简单。
如果没有这个唯一值,现在我想到两种方法解决。
1.可以在创建C1OlapGrid的时候,自己初始化数据的时候,将DataRow写入到C1OlapGrid的Row.Tag属性里,这样你就在SelectItem可以得到Row,然后去得到Row的Tag,就可以获取DataRow.
代码参考:
  1.   for (int i = 0; i < _C1OlapGrid.Rows.Count; i++)
  2.             {
  3. //table是绑定的数据源。
  4.                 _C1OlapGrid.Rows[i].Tag = table.Rows[i];
  5.             }
复制代码

这个方法如果C1OlapGrid的行过多,可能会增加负担,产生性能问题。
2.也是在初始化时候,将行号赋值给Row.Tag,然后无论怎样排序,都可以得到原始数据源的行号,然后按你之前的想法根据这个行号到数据源里查找。

你尝试看看怎样可以解决你的问题。
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
bj_zm
中级会员   /  发表于:2014-7-31 08:41:00
5#
回复 4楼Alice的帖子

要疯了,整一天还是没有搞定。c1olapgrid Selection怎么就不能返回个datarow,搞的这个头疼。
按你说的c1olapgrid 的rows 里的每个row我都加了tag行号。结果一排序,娘啊,这个rows全部刷新了。tag全没了。心啊,流血了。
回复 使用道具 举报
Alice
社区贡献组   /  发表于:2014-7-31 09:30:00
6#
回复 5楼bj_zm的帖子

不好意思,不知道你的数据源到底是什么样子的。
你把你的例子发上来,我帮你看看吧。
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
bj_zm
中级会员   /  发表于:2014-7-31 09:44:00
7#
回复 6楼Alice的帖子

Dim ValueList As IList(Of Object)
这是源。
不过排序刷了rows。好像跟数据源也没啥关系。

我感觉,数据源和界面显示是脱节的。能正在过来,反着推不回去。只能用行列号,而排序后行列号基本也没用了。就造成我这个问题。我按个属性和方法,看了一个遍,没有一个合适的方法和属性,能得到现在选择datarow。选择得到的只是个object类型的。不适合源进行使用。
回复 使用道具 举报
bj_zm
中级会员   /  发表于:2014-7-31 09:56:00
8#
至于例子我就不需要提供了吧,你们那么多demo都一样的,我就是用
OlapEngine.GetDetail 获得当前选择那个交叉的明细。你告诉我怎么弄就行了。并且排序后是有效的。
没有主键。主要你们的右键明细太不给力了,我只能获取数据,自定义个显示明细的界面。就这么简单一个需求。
回复 使用道具 举报
Alice
社区贡献组   /  发表于:2014-7-31 11:05:00
9#
回复 7楼bj_zm的帖子

我尝试做个简单的Sample给你,稍等下。
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
bj_zm
中级会员   /  发表于:2014-7-31 11:11:00
10#
回复 9楼Alice的帖子

好,非常感谢,我五分钟刷一下页面。
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部