線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1552
推到 Plurk!
推到 Facebook!

只用datasource將dataset的beforeedit事件插隊

 
hahalin
版主


發表:295
回覆:1698
積分:823
註冊:2002-04-14

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-10-10 18:21:50 IP:211.76.xxx.xxx 未訂閱
嗯 我知道這個標題很奇怪,請耐心看看吧!    一般在用delphi寫資料庫的介面,常會將工具列以及一些基本的介面寫在一個from上,然後再用這個form來繼承使用,小弟我也不例外,不過,我只在base form上面放一個datasource(以下以ds1稱呼之),這樣做有好處,要引用這個form可以用bde,ado,ibx等裡裡扣扣的來接,壞處是...嗯...很多...    舉其中一個例子來說好了,如果你是自訂工具列而不是dbnavigator,你也不希望使用者直接輸入後改變dataset的state,通常可以的做法是    1.設定ds1的autoedit為false,    2.在formcreate的時候把所有的control給enable=false,然後按下工具列再把enable=true,觀察levin之前上傳的進銷存作品就是如此的做法,可是如果你有pagecontrol那也不妥,你不能在不同的page間選擇,可是使用者權限設定還有個權限是可以瀏覽的吧,這樣不就剝奪人家的權利了,也是不妥不妥...    所以還是要設定ds1的autoedit屬性才是...    之所以會有這篇,實因小弟碰到障礙,然後想辦法去處理的,因為小弟有個案子是把他寫成使用者在dbedit用滑鼠點兩下就可以關聯帶出視窗選擇後返回,程式是這樣寫的:    
  
  dt1.edit;
  dt1customerid.value:=getcustomerid(sender);      
也就是說我已經在程式碼裡面自動進入編輯模式了,那該怎麼辦,我又不想改現有的程式,還有以懶人寫作法的宗旨來說,可以在baseform搞定就不要每個頁面做... 因此,我在baseform放一個scope為form的變數bcanedit,當按下工具列的"編輯"與"新增"按鈕,將之為true,回到瀏覽模式則為false,這麼一來只要在每個繼承他的form的ds1的dataset的beforeedit事件去判斷bcanedit是否為true,就可以規範使用者一定要透過工具列才可以編輯,那麼,這又違背了懶人設計法,所以 1.在baseform宣告一個事件變數,scope範圍為form,
  public
  v:tdatasetnotifyevent
  ...
  
2.在formcreate寫
      v:=ds1.dataset.beforeedit;
  
  ds1.dataset.beforeedit:=self.beforeedit;      
這裡讓ds1.dataset的beforeedit轉向到自訂的beforeedit事件,並用v去接原有的 3. 自訂的beforeedit如下
        if bcanedit=false then begin
       showmessage ('請由工具列按鈕編輯');
       abort;
    end
    else begin
       if assigned(v) then begin
          v(ds1.dataset);
       end;
    end;      
你永遠不知道ds1在後代的form中連結的dataset是否會有beforeedit的程式碼會加入,所以呢,在baseform這裡就必須為後代著想好, 懶人設計法之只在baseform放datasource,成功!!! p.s.儘管是懶人設計法,不過,寫baseform還真是他x的不好玩,要想很多...
superlevin
高階會員


發表:181
回覆:313
積分:180
註冊:2003-01-12

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-10-10 20:12:12 IP:211.76.xxx.xxx 未訂閱
引言: 觀察levin之前上傳的進銷存作品就是如此的做法,可是如果你有pagecontrol那也不妥,你不能在不同的page間選擇,可是使用者權限設定還有個權限是可以瀏覽的吧,這樣不就剝奪人家的權利了,也是不妥不妥...
哈~我還被拿來當活生生的例子吶!不過,又有想法了~二個月後大家拭目以待唄!先賣個關子~ 程式不是寫來玩的 而是要創造價值
------
林壽山
網站: http://superlevin.ifengyuan.tw
mail: superlevin@gmail.com
系統時間:2024-07-01 21:29:29
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!