我现在没有使用dbgrid来绑定数据(操作不方便),而是采用TStringGrid来手动写入数据,我现在需要为某列实行排序功能,但是由于数据量比较大我就不想再打开DataSet来获取数据然后再往stringgrid里写一次,不知道有没有象treeview一样通过设置SortType属性就可以实现排序.
  如果有其他的实现方式也可以告诉小弟,但是最好不要在重新打开数据执行SQL语句这种方法,因为数据量大的时候会影响速度.

解决方案 »

  1.   

    stringGrid 沒有很簡單的排序方式,
    你可將數據緩存到ClientDataset, 
    然後, 排序就重寫一次數據
      

  2.   

    对你的问题我没有正解,不过我想补充以下数据库排序的问题。
    楼主,当第一次数据下载到客户端后,你可以使用技巧防止当排序时重新打开数据库执行SQL操作的动作。比方说,你可以使用两个TClientDataSet对象,通过数据集提供者其与数据集联系;一个通过另一个数据集提供者与前一个TClientDataSet对象联系。这样你就可以在第二个TClientDataSet对象中进行数据排序,用的是定义和指定IndexName的方法,它的效率是很好的,因为只在内存中进行排序。
      

  3.   

    用ListView:
    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 );