請教先進,有關資料排序問題 |
答題得分者是:Fishman
|
johnny2212
初階會員 發表:34 回覆:65 積分:39 註冊:2003-04-09 發送簡訊給我 |
|
ccchen
版主 發表:61 回覆:940 積分:1394 註冊:2002-04-15 發送簡訊給我 |
|
Fishman
尊榮會員 發表:120 回覆:1949 積分:2163 註冊:2006-10-28 發送簡訊給我 |
Hi: 如果要在 Client 端,對 ClientDataSet 遞增排序,使用 ccchen 大大的方法即可。 在此,再提供一個遞減排序的方法
1.對 ClientDataSet 的每一個欄位增加 IndexDefs,並將 Options 的 ixDesceding 設為 True(也可以用程式自行產生)
procedure TQueryForm.CDS_QRY_FORECASTSAfterOpen(DataSet: TDataSet); var I : Word; begin CDS_QRY_FORECASTS.IndexDefs.Clear; FOR I := 0 TO CDS_QRY_FORECASTS.FieldDefs.Count - 1 DO BEGIN TRY CDS_QRY_FORECASTS.IndexDefs.Add(CDS_QRY_FORECASTS.FieldDefs.Items[I].Name '_INDEX',CDS_QRY_FORECASTS.FieldDefs.Items[I].Name,[ixDescending]); EXCEPT NULL; END; END; end;2.觸發程式進行排序 procedure TQueryForm.DBGrid_FORECASTSTitleClick(Column: TColumn); var ORDER_FIELD : String; I : Word; begin Screen.Cursor := crHourGlass; ORDER_FIELD := Column.FieldName; FOR I := 0 TO DBGrid_FORECASTS.Columns.Count - 1 DO DBGrid_FORECASTS.Columns.Items[I].Title.Caption := GridTitle[I]; IF CDS_QRY_FORECASTS.IndexName = ORDER_FIELD '_INDEX' THEN BEGIN CDS_QRY_FORECASTS.IndexFieldNames := ORDER_FIELD; END ELSE BEGIN CDS_QRY_FORECASTS.IndexName := ORDER_FIELD '_INDEX'; END; Screen.Cursor := crDefault; end;3.因我的 ClientDataSet 中,有些是計算欄位,必須避免掉,否則會產生錯誤訊息,故以此方法避免 -------------------------------- 小弟才疏學淺,若有謬誤請不吝指教 --------------------------------
------
Fishman |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |