如何讓DBGrid只顯示被選取的資料?? |
尚未結案
|
ivankuo
中階會員 發表:132 回覆:272 積分:95 註冊:2002-11-21 發送簡訊給我 |
|
T.J.B
版主 發表:29 回覆:532 積分:497 註冊:2002-08-14 發送簡訊給我 |
|
ivankuo
中階會員 發表:132 回覆:272 積分:95 註冊:2002-11-21 發送簡訊給我 |
|
pedro
尊榮會員 發表:152 回覆:1187 積分:892 註冊:2002-06-12 發送簡訊給我 |
|
ivankuo
中階會員 發表:132 回覆:272 積分:95 註冊:2002-11-21 發送簡訊給我 |
|
tech_state
版主 發表:44 回覆:638 積分:641 註冊:2003-02-10 發送簡訊給我 |
|
ivankuo
中階會員 發表:132 回覆:272 積分:95 註冊:2002-11-21 發送簡訊給我 |
|
channel
尊榮會員 發表:67 回覆:707 積分:854 註冊:2002-05-02 發送簡訊給我 |
引言: 那過濾的方式是要紀錄這些被selected的key values,再傳入另一個query當作where 條件ㄇ??是的 小弟有看到一個FilterOnBookmarks的方法,但是try不出來怎用?? procedure TForm1.BitBtn1Click(Sender: TObject); var I: Integer; Str: string; begin Str := ''; if DBGrid1.SelectedRows.Count > 0 then begin with DBGrid1.DataSource.DataSet do for I := 0 to DBGrid1.SelectedRows.Count-1 do begin GotoBookmark(pointer(DBGrid1.SelectedRows.Items[I])); if I > 0 then Str := Str ', '; Str:= Str #39 FieldByName('KeyField').AsString #39; end; with Query2 do//另一Query begin Close; SQL.Clear; SQL.Add('Select * From TableName Where KeyField in (' Str ')'); Open; end; end; end;~小弟淺見,參考看看~ 發表人 - channel 於 2003/05/22 12:46:02
------
~小弟淺見,參考看看~ |
ivankuo
中階會員 發表:132 回覆:272 積分:95 註冊:2002-11-21 發送簡訊給我 |
|
ivankuo
中階會員 發表:132 回覆:272 積分:95 註冊:2002-11-21 發送簡訊給我 |
|
channel
尊榮會員 發表:67 回覆:707 積分:854 註冊:2002-05-02 發送簡訊給我 |
|
Justmade
版主 發表:94 回覆:1934 積分:2030 註冊:2003-03-12 發送簡訊給我 |
var x: Integer; BMList: array of TVarRec; begin SetLength(BMList, smdbgrid1.SelectedRows.Count); for X:=0 to smdbgrid1.SelectedRows.Count - 1 do begin BMList[x].VType := vtPointer; BMList[x].VPointer := Pointer(smdbgrid1.SelectedRows[x]); end; bds1.FilterOnBookmarks(BMList); end;originally posted by Lieven Keersmaekers in http://groups.google.com/groups?hl=zh-TW&lr=lang_zh-CN|lang_zh-TW|lang_en&ie=UTF-8&oe=UTF-8&selm=3d2ac8fb_1%40dnews |
ivankuo
中階會員 發表:132 回覆:272 積分:95 註冊:2002-11-21 發送簡訊給我 |
感謝Justmade前輩,你的方式可以了,只是我自己也在try,確有問題 var
i:integer;
book:array of TBookmarkStr;
begin
SetLength(book,DBGrid1.SelectedRows.Count); for i:=0 to DBGrid1.SelectedRows.Count-1 do
begin
query1.GotoBookmark(pointer(DBGrid1.SelectedRows.Items[i]));
book[i]:=Query1.Bookmark;
end; Query1.FilterOnBookmarks([book]); //此行會有錯誤 end;
------
ivankuo |
Justmade
版主 發表:94 回覆:1934 積分:2030 註冊:2003-03-12 發送簡訊給我 |
這是因為 Bookmarks 的定義是 array of const 而不是 array of TBookmarkStr :
procedure FilterOnBookmarks(Bookmarks: array of const); 而根據 Help 中 "Variant open array parameters" 中說明 :
The array of const construction is equivalent to array of TVarRec. TVarRec, declared in the System unit, represents a record with a variant part that can hold values of integer, Boolean, character, real, string, pointer, class, class reference, interface, and variant types. TVarRec's VType field indicates the type of each element in the array. Some types are passed as pointers rather than values; in particular, long strings are passed as Pointer and must be typecast to string. 所以要成功的使用 FilterOnBookmarks, 一就是 : Query1.FilterOnBookmarks([BookMark1,BookMark2,BookMark3,..]) 但這只能靜態的寫死 若要動態的建立便要使用
array of TVarRec; 我看完 Help 後也不是很肯定應甚樣做,我沒使用 ADO 所以便上網找找資料轉貼給你了。
|
ivankuo
中階會員 發表:132 回覆:272 積分:95 註冊:2002-11-21 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |