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

DB Navigator問題

尚未結案
selina
一般會員


發表:39
回覆:64
積分:20
註冊:2002-12-05

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-09-28 13:25:01 IP:203.162.xxx.xxx 未訂閱
我想當使用者按insert或edit時 First,Prev,Next,Last button變成enable為false,直到使用按post 或cancel後First, Prev,Next,Last button的enable才變回true. 請問各位前輩要怎樣才可以做得到?謝謝!
xiaoning79627
初階會員


發表:46
回覆:60
積分:26
註冊:2002-11-10

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-09-28 14:03:24 IP:218.16.xxx.xxx 未訂閱
你好! 在DATASOURCE的ONSTATECHANGE事件中 procedure TForm2.DataSource1StateChange(Sender: TObject); begin if not (DataSource1.State in [dsEdit, dsInsert]) then DBNavigator1.Enabled:=true else DBNavigator1.Enabled:=false; end; 应该能达到你的要求! 努力,相信会做的更好!
cashxin2002
版主


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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-09-28 15:52:38 IP:63.84.xxx.xxx 未訂閱
您好!    請將如下程式寫在DataSource元件的OnStateChange事件中:
procedure TForm1.DataSource1StateChange(Sender: TObject);
begin
  if DataSource1.DataSet.State in [dsEdit, dsInsert] then
    DBNavigator1.Enabled := False
  else
    DBNavigator1.Enabled := True;
end;
不過, 這樣做也是有缺點存在, 就是當使用者點擊DBNavigator元件的dsEdit按鈕或dsInsert按鈕時(即DataSet處于修改或新增狀態)時, DBNavigator元件上所有的按鈕都會不能使用. 解決的方法, 您可參考以下幾種: 一. 在Form上另外再加兩個Button元件, 作用分別為Post(存檔)和Cancel(取消), 然后在DBNavigator元件的VisibleButtons屬性中, 將dsPost按鈕和dsCancel按鈕的屬性值設定為False, 將以上的程式碼修改成如下:
procedure TForm1.DataSource1StateChange(Sender: TObject);
begin
  if DataSource1.DataSet.State in [dsEdit, dsInsert] then
    begin
      DBNavigator1.Enabled := False;
      ButtonPost.Enable := True;
      ButtonCancel.Enable := True;
    end
  else
    begin
      DBNavigator1.Enabled := True;
      ButtonPost.Enable := False;
      ButtonCancel.Enable := False;
    end;
end;
利用如上的方法, 就可以實現您需要的目的了. 二. 在Form中使用兩個DBNavigator元件, DBNavigator1元件的VisibleButtons的屬性設定中, [nbFirst,nbPrior,nbNext,nbLast,nbInsert,nbDelete,nbEdit,nbRefresh]屬性值為True, 其它的為False; DBNavigator2元件的VisibleButtons的屬性設定中, [nbPost,nbCancel]屬性值為True, 其它為False, 調整兩個DBNavigator元件的大小和位置, 使其外觀看起來像一個DBNavigator元件, 然后, 將兩個DBNavigator元件的DataSource屬性設定為同一個DataSource元件, 并在DataSource元件的OnStateChange事件中寫入如下程式碼:
procedure TForm1.DataSource1StateChange(Sender: TObject);
begin
  if DataSource1.DataSet.State in [dsEdit, dsInsert] then
    begin
      DBNavigator1.Enabled := False;
      DBNavigator2.Enabled := True;
    end
  else
    begin
      DBNavigator1.Enabled := True;
      DBNavigator2.Enabled := False;
    end;
end;
三.您也可以自訂按鈕, 以達到您的要求, 小弟以前有發表過相關的文章, 請參考如下連接: http://delphi.ktop.com.tw/topic.php?TOPIC_ID=29249 參考看看! ===================== 努力,相信會獲得美麗! 忻晟
------
忻晟
selina
一般會員


發表:39
回覆:64
積分:20
註冊:2002-12-05

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-09-29 09:50:50 IP:203.162.xxx.xxx 未訂閱
謝謝cashxin,我後來用了你的第二種解決方法達到我要的了.... 謝謝~~~
系統時間:2024-05-18 5:26:31
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!