在DBgrid中多行选定,只能Ctrl+mouse不能用Shift+Mouse
用listview可以但,需要自己写数据。我想点击标题栏排序,目前是根据点击的栏目,然后,重新查询并 order by可以实现。
(将order前的SQL字符串保存的一个string变量中,每次先clear,然后ADD,再ADD order by)
但数据量多的时候刷新是问题,我差delphi帮助listview可以这值
sortby sorted sortcolumn实现的,但无法用各位高手帮忙

解决方案 »

  1.   

    procedure TMain_Form.Lv_CbdlColumnClick(Sender: TObject;
      Column: TListColumn);
    begin
      ColumnToSort := Column.Index;
      (Sender as TCustomListView).AlphaSort;
      end;procedure TMain_Form.Lv_CbdlCompare(Sender: TObject; Item1,
      Item2: TListItem; Data: Integer; var Compare: Integer);
    var
      ix: Integer;
    begin
      if ColumnToSort = 0 then
        Compare := CompareText(Item1.Caption,Item2.Caption)
      else
      begin
        ix := ColumnToSort - 1;
        Compare := CompareText(Item1.SubItems[ix],Item2.SubItems[ix]);
      end;
    end;
      

  2.   

    procedure TForm1.DBGrid1TitleClick(Column: TColumn);
    var
      DataSet: TDataSet;
    begin
        DataSet := Column.Field.DataSet;
        if DataSet is TCustomADODataSet then
        with TCustomADODataSet(DataSet) do
        begin
          if (Pos(Column.Field.FieldName, Sort) = 1) and (Pos(' DESC', Sort) = 0) then
            Sort := Column.Field.FieldName + ' DESC' else
            Sort := Column.Field.FieldName + ' ASC';
        end;
    end;
    这个最棒,拷过去就可以了,双向排序
      

  3.   

    实现了顺序排,
    倒序
    Compare := CompareText(Item1.SubItems[ix],Item2.SubItems[ix]);
    --->
    Compare := CompareText(Item2.SubItems[ix],Item1.SubItems[ix]);
    (一)
    能在标题用上下的三角标示用变量记住,当前是顺序还是倒序可以实现,二次点击倒过来排序,有更简单的方法吗?(二)
    对于一些非字符串性的内容,如时间,数字,如何排序。
    (三)
    首列是序号从1...n,是手工上取得,排序后就乱了,内让他自动仍然变回1...n按顺序排列吗?
    (四)