全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1319
推到 Plurk!
推到 Facebook!

DBGRID內如有一項符合條件,僅此一行隱藏,其餘顯現出來

尚未結案
lyons
一般會員


發表:8
回覆:11
積分:3
註冊:2004-01-19

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-04-30 17:25:58 IP:203.204.xxx.xxx 未訂閱
DBGRID內如有一項符合條件,僅此一行隱藏,其餘顯現出來 如 DBGRID內有 客戶編號 產品名稱 數量 A01 KKK 0 A02 UUU 1 A03 DDD 2 但我數量為零的不顯示出來應該如何做呢
change.jian
版主


發表:29
回覆:620
積分:439
註冊:2003-06-02

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-04-30 18:08:58 IP:61.229.xxx.xxx 未訂閱
可以運用filtr把數量為0的隱?起來,如下: 在DBGrid對應的DataSet元件的Filter設定如下: DataSet.Filter:='數量>0'; //請把數量換成欄位名稱 然後把DataSet的Filtered設為True即可.
lyons
一般會員


發表:8
回覆:11
積分:3
註冊:2004-01-19

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-05-01 11:17:57 IP:61.70.xxx.xxx 未訂閱
版主大人 小弟還是看不太懂耶 可否再詳細一點 我是個初學者 程度不好 謝謝大大
supman
尊榮會員


發表:29
回覆:770
積分:924
註冊:2002-04-22

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-05-02 16:24:12 IP:61.70.xxx.xxx 未訂閱
您好: 試試看以下方法: 如果您是用AdoQuery的話找一個叫OnFilterRecord的事件,在裡面寫下:
procedure TForm1.ADOQuery1FilterRecord(DataSet: TDataSet;
  var Accept: Boolean);
begin
if (AdoQuery1.FieldByName(數量).AsInteger>0) 
 then Accept:=true
 else Accept:=false
end;
這樣就可以了.
lyons
一般會員


發表:8
回覆:11
積分:3
註冊:2004-01-19

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-05-02 23:29:19 IP:61.70.xxx.xxx 未訂閱
謝謝版主的回答 supman大大,你的解答很詳細,正是我要的,但如用checkbox來進行的話,accept 好像不可以用,要如何解決
supman
尊榮會員


發表:29
回覆:770
積分:924
註冊:2002-04-22

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-05-02 23:44:00 IP:203.204.xxx.xxx 未訂閱
您好: 看不董您所謂checkbox與accept的關係是什麼?可否說詳細點. Accept是一個布林值,與CheckBox.Checked是一樣的.
lyons
一般會員


發表:8
回覆:11
積分:3
註冊:2004-01-19

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-05-03 06:49:51 IP:61.70.xxx.xxx 未訂閱
supman大大: 對不起,表示的不清楚 我想勾選checkbox之後,然後'數量'為0才隱藏 如沒有勾選,則一樣會顯示明細出來,
cashxin2002
版主


發表:231
回覆:2555
積分:1937
註冊:2003-03-28

發送簡訊給我
#8 引用回覆 回覆 發表時間:2005-05-03 09:36:58 IP:202.62.xxx.xxx 未訂閱
您好﹗    如果您是使用具有SQL查詢功能的資料集元件(如Query, ADOQuery等)﹐建議您直接使用其SQL語法來完成此類工作﹐有助于效率的提升﹐因為使用Filter屬性或是使用OnFilterRecord事件來過濾資料﹐其工作原理是把每一筆資料和Filter屬性進行比對或是每一筆資料都呼叫一次OnFilterRecord事件來過濾﹐因為如果當資料集中有大量的資料﹐或是過濾條件很复雜時﹐都會引起效率的降低﹒    使用SQL語法方法如下﹕
begin
  ADOQuery1.Close;
  ADOQuery1.SQL.Clear;
  if CheckBox1.Checked then     
    ADOQuery1.SQL.Add('Select * From 資料表 Where 數量 <> 0')
  else
    ADOQuery1.SQL.Add('Select * From 資料表');
  ADOQuery1.Open;
end;
================================= 有空來瞅瞅我﹗因為我是您的朋友﹐有您真好﹗ ================================
------
忻晟
supman
尊榮會員


發表:29
回覆:770
積分:924
註冊:2002-04-22

發送簡訊給我
#9 引用回覆 回覆 發表時間:2005-05-03 10:19:57 IP:61.70.xxx.xxx 未訂閱
您好: 試試以下:
Accept:=true
if (CheckBox.Checked) then 
 if (AdoQuery1.FieldByName(數量).AsInteger>0) 
  then Accept:=true
  else Accept:=false
hagar
版主


發表:143
回覆:4056
積分:4445
註冊:2002-04-14

發送簡訊給我
#10 引用回覆 回覆 發表時間:2005-05-03 10:33:29 IP:202.39.xxx.xxx 未訂閱
除了change.jian、supman 與 cashxin2002 大大說的 另一種方式是在那個 CheckBox 的 OnClick 中決定是否要過濾 record
procedure TForm1.CheckBox1Click(Sender: TObject);
begin
  ADOQuery1.Filtered := CheckBox1.Checked;
end;
-- hagar.
lyons
一般會員


發表:8
回覆:11
積分:3
註冊:2004-01-19

發送簡訊給我
#11 引用回覆 回覆 發表時間:2005-05-03 20:34:44 IP:61.70.xxx.xxx 未訂閱
change.jian , supman ,cashxin2002,hagar 謝謝諸位大大的指導,小弟我受益良多, 我試過了,已經解決了
系統時間:2024-06-26 15:48:02
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!