ClientDataSet 排序 筆記
本來因該是用TkbmMemTable
但不知為何被改掉ClientDataSet
後來找到一些參考資料就照著修改
不過還是遇到一些小衝突expression of type 'TAction' found
原因是我的action內也有exit ,
就把該段判別field name 和 type拿掉..
不然笨一點就If xxx then 空白 else 繼續跑即可
if (Field = nil ) or ( (Field is TObjectField) or (Field is TBlobField) or (Field is TAggregateField) or (Field is TVariantField) or (Field is TBinaryField) ) then else
不過還是偷懶一下,直接拿掉了。
procedure TQRY25.DBGrid13TitleClick(Column: TColumn);
begin
inherited;
//TkbmMemTable 元件
{
TkbmMemTable(DBGrid13.DataSource.DataSet).SortFields := Column.FieldName;
TkbmMemTable(DBGrid13.DataSource.DataSet).Sort([]);
}
//add by Joelee 20141008 純asc 排序
{ case Column.Index of
0 : kbmShot.IndexFieldNames := ''; // no Index
else
kbmShot.IndexFieldNames := Column.FieldName; // Sort by Clicked Column
end;
}//end by joelee
//add by Joelee 20141009
SortClientDataSet(kbmShot, Column.FieldName);
//end by joelee
end;
function TQRY25.SortClientDataSet(ClientDataSet: TClientDataSet; const FieldName: string): Boolean; var i: Integer; NewIndexName: string; IndexOptions: TIndexOptions; Field: TField; begin Result := False; Field := ClientDataSet.Fields.FindField(FieldName); ClientDataSet.IndexDefs.Update; if ClientDataSet.IndexName = FieldName + '__IdxA' then begin NewIndexName := FieldName + '__IdxD'; IndexOptions := [ixDescending]; end else begin NewIndexName := FieldName + '__IdxA'; IndexOptions := []; end; //Look for existing index for i := 0 to Pred(ClientDataSet.IndexDefs.Count) do begin if ClientDataSet.IndexDefs[i].Name = NewIndexName then begin Result := True; Break end; //if end; // for //If existing index not found, create one if not Result then begin ClientDataSet.AddIndex(NewIndexName, FieldName, IndexOptions); Result := True; end; // if not //Set the index ClientDataSet.IndexName := NewIndexName; end;
參考網址
http://edn.embarcadero.com/article/29056
大家一起加入blogads 賺零用錢!!