關於DBGrid的排序問題 |
尚未結案
|
jimm
一般會員 發表:10 回覆:9 積分:3 註冊:2004-09-16 發送簡訊給我 |
|
SimonLee
一般會員 發表:15 回覆:23 積分:7 註冊:2003-09-20 發送簡訊給我 |
|
wameng
版主 發表:31 回覆:1336 積分:1188 註冊:2004-09-16 發送簡訊給我 |
|
jimm
一般會員 發表:10 回覆:9 積分:3 註冊:2004-09-16 發送簡訊給我 |
|
jimm
一般會員 發表:10 回覆:9 積分:3 註冊:2004-09-16 發送簡訊給我 |
|
SimonLee
一般會員 發表:15 回覆:23 積分:7 註冊:2003-09-20 發送簡訊給我 |
|
cashxin2002
版主 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
引言: 由於我是個Delphi 的新手,目前尚未摸熟ADOQuery & SQL的語法 請問這個是需要在ADOQuery內下什麼SQL的語法嗎? 還是說只需要利用您所說的用法即可?您好﹗ 插個花﹒ 此用法非SQL語法﹐而是ADO資料集元件的屬性﹐所以無關系SQL﹐直接使用即可﹒ ========================= 我是您的朋友﹐有您真好﹗ =========================引言: 使用 ADOQuery 有 SORT 功能。 ADOQuery1.Sort := FieldName ' DESC' ADOQuery1.Sort := FieldName ' ASC';
------
忻晟 |
jimmygump
一般會員 發表:8 回覆:12 積分:4 註冊:2003-09-09 發送簡訊給我 |
我最近也在查類似的實作方法,的確用 Sort 屬性最快。 但我一直還是無法針對 fkData 以外的 FieldType 進行排序,例如:fkLookup
舉例:
在[會員資料表]裡有一個 Foreign Key 是 [最高學歷ID]
在 dataset 加一個 Lookup Field 為 [最高學歷名稱]
DBGrid 裡顯示的是 [最高學歷名稱] 而不是 [最高學歷ID] 我還是無法針對這個 [最高學歷名稱] 排序。 雖然有人建議用 SQL 去 join 出來,然後又是 Close 再 Open 的...但都不是我要的方法。(我就是從記錄 ORDER BY 子句的架構,最後因為種種不符需求之下,不得不揚棄了,再回頭用改 Sort 屬性反而很方便) 有沒有人願意提供方法呢?
.不要用改 Order By 子句,再 Close 又 Open 的方法
.而能針對 fkLookup, fkCalculated 欄位做 Grid 排序 Jimmy Gump
------
Jimmy Gump |
wameng
版主 發表:31 回覆:1336 積分:1188 註冊:2004-09-16 發送簡訊給我 |
全貼出來好了!
先決條件,一定要使用 ADOQuery1。 點選,DBGRID 標題自動排序。
點一次,由小到大。再點一次,由大到小。
type TForm1 = class(TForm) DBGrid1: TDBGrid; ...... procedure FormCreate(Sender: TObject); procedure DBGrid1TitleClick(Column: TColumn); procedure DBGrid1ColumnMoved(Sender: TObject; FromIndex, ToIndex: Integer); private PCOLIndex : Integer; IsDESC : Boolean; public { Public declarations } end; var Form1: TForm1; implementation {$R *.DFM} procedure TForm1.FormCreate(Sender: TObject); begin IsDESC := false; PCOLIndex := -1; end; procedure TForm1.DBGrid1TitleClick(Column: TColumn); begin with TCustomADODataSet(DBGrid1.DataSource.DataSet) do begin if IsEmpty or (Not Active) then Exit; IsDESC := (PCOLIndex = Column.Index) and (Not IsDESC); PCOLIndex := Column.Index; if IsDESC then Sort := Column.Field.FieldName ' DESC' else Sort := Column.Field.FieldName ' ASC'; end; end; procedure TForm1.DBGrid1ColumnMoved(Sender: TObject; FromIndex, ToIndex: Integer); begin if FromIndex = PCOLIndex then PCOLIndex := toIndex; end; end. |
change.jian
版主 發表:29 回覆:620 積分:439 註冊:2003-06-02 發送簡訊給我 |
|
jimmygump
一般會員 發表:8 回覆:12 積分:4 註冊:2003-09-09 發送簡訊給我 |
引言: 全貼出來好了! 先決條件,一定要使用 ADOQuery1。 點選,DBGRID 標題自動排序。 點一次,由小到大。再點一次,由大到小。不知版主試過 fkLookup 嗎? 這樣的 code 應該只適合 fkData。 另外,在中國的 CSDN 論壇上看到有人是這樣的觀念來處理 fkLookup 的: if (Column.Field.FieldKind = fkData) then ...... else if (Column.Field.FieldKind = fkLookup) then Sort := Column.Field.KeyFields;不過我仍然覺得不妥,畢竟呈現出來的是 ResultFields,就應該以 ResultFields 來排序。怎麼能預期 KeyFields 和排序結果和 ResultFields 是一致的呢? 這個問題仍然無解中...
------
Jimmy Gump |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |