我现在没有使用dbgrid来绑定数据(操作不方便),而是采用TStringGrid来手动写入数据,我现在需要为某列实行排序功能,但是由于数据量比较大我就不想再打开DataSet来获取数据然后再往stringgrid里写一次,不知道有没有象treeview一样通过设置SortType属性就可以实现排序.
如果有其他的实现方式也可以告诉小弟,但是最好不要在重新打开数据执行SQL语句这种方法,因为数据量大的时候会影响速度.
如果有其他的实现方式也可以告诉小弟,但是最好不要在重新打开数据执行SQL语句这种方法,因为数据量大的时候会影响速度.
解决方案 »
- 高分跪求InstallShield Express3.5中文包
- 请问如何从一个section,key,value都动态变化的ini文件中取出全部的内容
- 怎样让窗口不被摭挡!??
- 数据库备份后,为何不能成功还原
- 100分~~求一计算器的完整源码..
- 时间查询,在线等!
- 怎么从注册表里面获得机器的mac地址?
- 请问各位,为什么我在IIS下不能浏览我得CGI客户端程序,而却可以浏览ISAPI的DLL文件,那个CGI明明在Delphi下编译室通过的呀,服务器程序
- ini文件问题:如何判断一个INI文件处于打开状态还是处于关闭状态
- 如何给不是激活窗口发送字符 用Sendmessage 解决可以加分
- 如何让IE运行时不显示工具条,地址栏等等?
- 出现这一问题不知是什么原因??请大家给分析分析!
你可將數據緩存到ClientDataset,
然後, 排序就重寫一次數據
楼主,当第一次数据下载到客户端后,你可以使用技巧防止当排序时重新打开数据库执行SQL操作的动作。比方说,你可以使用两个TClientDataSet对象,通过数据集提供者其与数据集联系;一个通过另一个数据集提供者与前一个TClientDataSet对象联系。这样你就可以在第二个TClientDataSet对象中进行数据排序,用的是定义和指定IndexName的方法,它的效率是很好的,因为只在内存中进行排序。
function CustomSortProc( Item1, Item2 : TListItem; lParam : LongInt ) : Integer; stdcall;beginif lParam >= 0 then //lParam中保存的是SubItem的Indexbeginresult := -CompareText(Item1.SubItems.Strings[lParam],Item1.SubItems.Strings[lParam] );end elseresult := 0;end;在ListView的ColumnClick事件响应方法中输入CustomSort(@CustomSortProc, Column.Index );