注册 登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

银河军团大本营

光荣的军团,永远的丰碑 <坚持原创>

 
 
 

日志

 
 

cxGrid操作选中行数据的方式  

2013-03-27 09:14:33|  分类: 编程小技巧 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

  cxGrid组件功能超级强大,然而使用起来也非常复杂。就拿操作cxGrid选中行数据来说,这就要分好多种情形,并且每一种情形的处理方式还不一样,或者一种情形有好多种处理方式,有些处理方式效果可能一样,但有些方式却有一些细微的差别。

  下面是刚开始我用的代码(为了清楚起见,以下代码未使用with):

// gridView: TcxGridDBBandedTableView or TcxGridDBTableView

// gridView.DataController.DataModeController.GridMode = True

var
i: Integer;
selVals: TStringList;
begin
selVals := TStringList.Create;
try
// get selected values
for i := 0 to gridView.DataController.GetSelectedCount -1 do begin
selVals.Add(VarToStr(gridView.DataController.Values[gridView.DataController.GetSelectedRowIndex(i),
gridView.GetColumnByFieldName('KeyFieldName').Index]));
end;

//do others...

finally
selVals.Free;
end;
end;

   运行之后跟踪(debug)了一下,发现挺正常。然而,当有分组(group)时,再执行以上代码,却发现gridView.DataController.Values[]得到的结果不正确!没奈何,只好又找其他方法,还好,功夫不负有心人,最后找到以下方法,无论有没有分组(group)都正常:

var
i: Integer;
selVals: TStringList;
begin
selVals := TStringList.Create;
try
// get selected values
for i := 0 to gridView.DataController.GetSelectedCount -1 do begin
selVals.Add(VarToStr(gridView.ViewData.Rows[gridView.DataController.GetSelectedRowIndex(i)].Values[gridView.GetColumnByFieldName('KeyFieldName').Index]));
end;

//do others...

finally
selVals.Free;
end;
end;

  从执行结果看,gridView.ViewData.Rows会随着分组的变化而随时调整,而gridView.DataController.Values则不会变,始终是加载时的原始样子。经测试,以上代码在GridMode = True时也能正常使用。

  如果在根据cxGrid中的记录位置来定位到它所关联的实际DataSet中的记录,可以通过设置gridView.DataController.FocusedRowIndex来实现,比如在DataSet中定位当前选中记录:

for i := 0 to gridView.DataController.GetSelectedCount -1 do begin
gridView.DataController.FocusedRowIndex := gridView.DataController.GetSelectedRowIndex(i);
//现在可以直接查看DataSet了,且可以通过记住DataSet.Bookmark来处理多选
end;

  对于gridView.DataController.DataModeController.GridMode = True时,还可以用gridView.DataController.GetSelectedBookmark(index)来取得Bookmark,查一下帮助就很明了,这里就不多说了。

  以上仅是其中的一种写法,对于cxGrid而言,可能的写法可能有好多种,那就有待大家发掘了。

  最后说句闲话:cxGrid可能是有史以来最强大、最复杂的表格组件,如果用它,尽量利用它的强大功能,尽量在设计期搞定,最好少利用它的“复杂”功能!要不然,光是弄清来龙去脉就够折腾的了!

  评论这张
 
阅读(3038)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018