AfterScroll事件重復執行 |
答題得分者是:yorkland
|
double9999
一般會員 發表:8 回覆:12 積分:4 註冊:2004-12-09 發送簡訊給我 |
各位大大,在下有禮了
開發環境windows xp delphi7 Sql server 2000,使用delphi的ClientDataSet控件,用cxGrid來顯示數據,
問題:我們在ClientDataSet的AfterScroll中寫了代碼,但在formShow的時候,該代碼就被多次(= 記錄條數 4)調用,用call stack來debug,誰來調用了這段代碼,沒有發現調用者,估計可能是cxDataControl,
各位大大有什麽指教? 發表人 - double9999 於 2005/02/25 17:32:38
|
yorkland
高階會員 發表:2 回覆:138 積分:108 註冊:2004-12-17 發送簡訊給我 |
|
P.D.
版主 發表:603 回覆:4038 積分:3874 註冊:2006-10-31 發送簡訊給我 |
引言: 各位大大,在下有禮了 開發環境windows xp delphi7 Sql server 2000,使用delphi的ClientDataSet控件,用cxGrid來顯示數據, 問題:我們在ClientDataSet的AfterScroll中寫了代碼,但在formShow的時候,該代碼就被多次(= 記錄條數 4)調用,用call stack來debug,誰來調用了這段代碼,沒有發現調用者,估計可能是cxDataControl, 各位大大有什麽指教? 發表人 - double9999 於 2005/02/25 17:32:38不知道你onshow時的程式碼有做何種動作 我記憶中, open會觸發一次, .first 也會觸發一次 |
StrongLemon
高階會員 發表:10 回覆:166 積分:105 註冊:2004-04-18 發送簡訊給我 |
您好:回答如下
1.如果你有source
請修正下面這段
cxDBData.pas procedure TcxDBDataController.LoadStorage; var OldBeforeScroll:TDataSetNotifyEvent;/2.沒有source時 請宣告一個LockCount:Integer; 初始值LockCount:=0 在不想觸發事件處加入 procedure TForm1.SQLQuery1AfterScroll(DataSet: TDataSet); begin if LockCount>0 then exit; end;在做某事不想觸發該事件 Inc(LockCount); try //do something finally Dec(LockCount); //最後如果你想要執行AfterScroll事件,那就 SQLQuery1AfterScroll(SQLQuery1); end;3.或者也可以這樣寫 var OldBeforeScroll:TDataSetNotifyEvent; OldAfterScroll:TDataSetNotifyEvent; begin OldBeforeScroll:=SQLQuery1.BeforeScroll; OldAfterScroll:=SQLQuery1.AfterScroll; SQLQuery1.BeforeScroll:=nil; SQLQuery1.AfterScroll:=nil; try //do something finally SQLQuery1.BeforeScroll:=OldBeforeScroll; SQLQuery1.AfterScroll:=OldAfterScroll; OldBeforeScroll:=nil; OldAfterScroll:=nil; end; |
GrandRURU
站務副站長 發表:240 回覆:1680 積分:1874 註冊:2005-06-21 發送簡訊給我 |
我也遇到相同的問題
DevExpress 客服是這樣回答的: cxGrid & Dataset AfterScroll problem [code delphi] ... procedure TForm1. if not DataSet.ControlsDisabled then begin //Your code ... end; end; [/code] |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |