DBGrid按下Title排序的問題(Field index out of range) |
缺席
|
wscken
初階會員 發表:28 回覆:75 積分:45 註冊:2003-08-05 發送簡訊給我 |
請問各位大大,之前有很多說要按下DBGrid的Title就排序的討論,
比如
Justmade 大大的
http://delphi.ktop.com.tw/topic.php?TOPIC_ID=28513
http://delphi.ktop.com.tw/topic.php?TOPIC_ID=30526
以及
Fishman 大大的
http://delphi.ktop.com.tw/topic.php?topic_id=42872 但是,
不是出現 Field index out of range
就是 index 'STA_NAME_INDEX' not found 請問一下,這個問題是不是出在該欄位是LookUp出來的關係,
因為其他的都可以執行,就是只要按到該欄位就不行,
請各位大大幫我解答一下,謝謝!!!
|
Fishman
尊榮會員 發表:120 回覆:1949 積分:2163 註冊:2006-10-28 發送簡訊給我 |
|
hahalin
版主 發表:295 回覆:1698 積分:823 註冊:2002-04-14 發送簡訊給我 |
|
wscken
初階會員 發表:28 回覆:75 積分:45 註冊:2003-08-05 發送簡訊給我 |
|
hahalin
版主 發表:295 回覆:1698 積分:823 註冊:2002-04-14 發送簡訊給我 |
|
Fishman
尊榮會員 發表:120 回覆:1949 積分:2163 註冊:2006-10-28 發送簡訊給我 |
Hi wscken, 我指的並不是在 SQL Command 中下 Order By,因為既然是 Lookup Field,Command 中自然也不會有該欄位,如何排序? 我指的是在 SQL Command 中將該欄位一併 Select 出來,再套用先前的程式碼就可以了,但如此一來,可能會造成你的 DataSet 為 ReadOnly,所以才會說,若是 DBGrid 僅供查詢可以直接由 SQL Command 中著手 若是 DBGrid 需可修改,建議你用 hahalin 版大的方法試試
----------------------------------
小弟才疏學淺,若有謬誤尚請不吝指教
----------------------------------
------
Fishman |
wscken
初階會員 發表:28 回覆:75 積分:45 註冊:2003-08-05 發送簡訊給我 |
|
hahalin
版主 發表:295 回覆:1698 積分:823 註冊:2002-04-14 發送簡訊給我 |
http://community.borland.com/article/0,1410,29056,00.html http://community.borland.com/article/0,1410,22571,00.html 中的 Sorting If you want to sort the result set in ClientDataset, 如果你要在clientdataset排序 you can use the IndexFieldNames property in the same way as you did with TTable. 你可以使用indexfilednames屬性就像在TTable裡面的用法一樣 ...中間這一段就是indexfieldnames的使用說明 You can define the calculated field type either at design-time or at run-time. At design-time, you can add a new calculated field for the ClientDataset just as you always have done with TDBDataset components. 你可以再設計階段使用一種新的calculated欄位... Invoke the Fields Editor by double-clicking on the ClientDataset. Then, press the right mouse button inside the Fields Editor to bring up the context menu, where you will select the menu item "New field...". When the New Field dialog appears, you can select either Calculated or InternalCalc to set the TField.FieldKind. You can also change the field type at design-time by using the Object Inspector to change the value of the FieldKind property from fkCalculated to fkInternalCalc. 在欄位編輯視窗增加一個欄位,設定為fkInternalCalc類型 http://www.delphi32.com/info_facts/faq/faq_67.asp How do you make TClientDataSet sort on lookup or calculated fields? In the fields editor, when creating a new field to be sorted on, choose New Field from the context menu and choose InternalCalc as the field type. Or if creating TFields in code, make the TField.FieldKind fkInternalCalc instead of fkCalc. fkInternalCalc is only available in ClientDataSets. http://podgoretsky.com/ftp/Docs/Delphi/D5/dg/5_ds3.html Using internally calculated fields in client datasets Internally calculated fields, just like calculated fields, are calculated in an OnCalcFields event handler. However, you can optimize your event handler by checking the State property of your client dataset. When State is dsInternalCalc, you must recompute internally calculated fields. When State is dsCalcFields, you need only recompute regular calculated fields.
|
wscken
初階會員 發表:28 回覆:75 積分:45 註冊:2003-08-05 發送簡訊給我 |
|
hahalin
版主 發表:295 回覆:1698 積分:823 註冊:2002-04-14 發送簡訊給我 |
|
wscken
初階會員 發表:28 回覆:75 積分:45 註冊:2003-08-05 發送簡訊給我 |
hahalin大大,我剛剛一氣之下從灌了程式,結果居然可以了,用的發法是
http://delphi.ktop.com.tw/topic.php?topic_id=42872
的方法, 不過ClientDataSet的方法我不能用,因為在整各專案內都是使用ADOQuery
,實在很多,又不能改,所以在ADOQuery那邊還是沒有辦法在Lookup的欄位上
,做排序的功能,至於程式碼則是普通的寫法,如下.... var
Str:String ;
begin
Str := Column.Field.FieldName ;
With TADOQuery(self.FindComponent(Column.Grid.DataSource.DataSet.Name)) Do
Begin //--- 動態找出點下按鍵的資料模組內的ADOQuery ---
if Pos(' DESC', Sort)= 0 then
Sort := Column.Field.FieldName ' DESC'
else
Sort := Str
End ;
end; 難道在不改變架構的情形下,只能更改Sql語法從抓資料嗎???
|
hahalin
版主 發表:295 回覆:1698 積分:823 註冊:2002-04-14 發送簡訊給我 |
|
wscken
初階會員 發表:28 回覆:75 積分:45 註冊:2003-08-05 發送簡訊給我 |
----------------------------------------------------
也可以不用改掉原來的adoquery 加個datasetprovider 再加上 clientdataset也是可以
---------------------------------------------------- 目前無法這樣改,就是因為如此一來修改的幅度太大,不是短時間能夠完成的,
依照原架構加個datasetprovider跟clientdataset的話,就等於整各要從來了,
因為如此一來的資料庫操作也不太一樣,所以才會無法動手..變成現在的不能排序了....真糟糕..
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |