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

請問一個PageControl與DBGrid間的公用程序問題

尚未結案
chateau_frank
一般會員


發表:20
回覆:32
積分:10
註冊:2005-07-07

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-07-19 13:44:42 IP:211.20.xxx.xxx 未訂閱
各位大大午安 【新手發問】 我用PageControl開了五個TabSheets,在每個TabSheet中都有一個DBGrid,他們都呼叫共同的AdoTable與DataSource,分別用Filter過濾了不同的條件來顯示資料。 在每個TabSheet的OnShow事件中,我都寫了以下的指令,以DBGrid1為例:   DBGrid1.Columns[0].Width := 30;   DBGrid1.Columns[1].Width := 100;   DBGrid1.Columns[2].Visible := False;   DBGrid1.Columns[3].Width := 100;   DBGrid1.Columns[4].Width := 100;   DBGrid1.Columns[5].Width := 100;   DBGrid1.Columns[6].Width := 100;   DBGrid1.Columns[7].Width := 100;   DBGrid1.Columns[8].Width := 100; 請問有何辦法來讓整個單元的程式碼精減到最少,我試著建新的程序來跑,但不知道該如何將整個過程完整的設定,請高手大大們指點,感謝。
Fishman
尊榮會員


發表:120
回覆:1949
積分:2163
註冊:2006-10-28

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-07-19 14:06:56 IP:210.65.xxx.xxx 未訂閱
Hi chateau_frank,    Double Click DBGrid 並於出現之 DBGRid.Column 的屬性中,按下 Add All Fields(前提是相對應的 DataSet 中必須先行設定好欄位) 如此即可已針對每一個 Column 進行設定(含欄寬與 Visible 與 Label等等屬性),不需要再透過程式碼進行設定! 發表人 -
------
Fishman
jeff377
初階會員


發表:9
回覆:60
積分:33
註冊:2004-08-10

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-07-19 14:16:45 IP:61.56.xxx.xxx 未訂閱
1.先寫一個共用的函數,將DBGrid傳入
procedure SetGridColumns(DBGrid: TDBGrid)
begin
  DBGrid.Columns[0].Width := 30;
  DBGrid.Columns[1].Width := 100;
  DBGrid.Columns[2].Visible := False;
  DBGrid.Columns[3].Width := 100;
  DBGrid.Columns[4].Width := 100;
  DBGrid.Columns[5].Width := 100;
  DBGrid.Columns[6].Width := 100;
  DBGrid.Columns[7].Width := 100;
  DBGrid.Columns[8].Width := 100;
end;
2.然後在每個TabSheet的OnShow事件中呼叫此函數(以DBGrid1為例)
  SetGridColumns(DBGrid1);
Z12345
一般會員


發表:1
回覆:5
積分:6
註冊:2005-07-18

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-07-19 14:22:56 IP:219.81.xxx.xxx 未訂閱
用 TabControl
wameng
版主


發表:31
回覆:1336
積分:1188
註冊:2004-09-16

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-07-19 14:32:37 IP:61.222.xxx.xxx 未訂閱
建議: 使用一個 DBGird 就可以。 在 PageControl 的 OnChange 事件中,修改 DBGrid 的Parent 及重新定義  Filter    免得佔用記憶體。(參考)
第二個問題有很多作法:
1. 宣告陣列如:
   Const 
     MyColWidths :Array[0..8] of Integer =(30,....);
   在用迴圈方式定義 Column width
   For I:=0 to 8 do DBGrid1.Columns[I].Width := MyColWidths[I];    2. 善用 TStringGrid(DBGrid1).DefaultColWidth := 100;
參考 ~~~~~~~~~~~ 難得聰明,常常糊塗。 ~~~~~~~~~~~
chateau_frank
一般會員


發表:20
回覆:32
積分:10
註冊:2005-07-07

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-07-19 15:47:15 IP:211.20.xxx.xxx 未訂閱
1.感謝Fishman兄,我有試過這方法,但怕以後搜尋條件改變後要一樣一樣去屬性欄改,因此想用個快速的方式來解決,感謝您的幫忙,以後還有勞您的協助喔。 2.謝謝Jeff377兄,可否再告知一下該如何宣告此程序,因我放了幾個地方宣告都說unsatisfied forward or external declaration。 3.感謝Wameng兄,您指導的方法對我來說很有幫助,因小弟功力不夠,會先試著去按您教的方式去做,如有不懂之處,還請多多指導。
jeff377
初階會員


發表:9
回覆:60
積分:33
註冊:2004-08-10

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-07-19 22:33:21 IP:211.75.xxx.xxx 未訂閱
宣告在表單的Private中,實作在implementation區段中    
TfrmForm = class(TForm)
private
    { Private declarations }
    procedure SetGridColumns(DBGrid: TDBGrid);
public    end;    implementation    procedure SetGridColumns(DBGrid: TDBGrid);
begin
  DBGrid.Columns[0].Width := 30;
  DBGrid.Columns[1].Width := 100;
  DBGrid.Columns[2].Visible := False;
  DBGrid.Columns[3].Width := 100;
  DBGrid.Columns[4].Width := 100;
  DBGrid.Columns[5].Width := 100;
  DBGrid.Columns[6].Width := 100;
  DBGrid.Columns[7].Width := 100;
  DBGrid.Columns[8].Width := 100;
end;
chateau_frank
一般會員


發表:20
回覆:32
積分:10
註冊:2005-07-07

發送簡訊給我
#8 引用回覆 回覆 發表時間:2005-07-20 11:13:34 IP:211.20.xxx.xxx 未訂閱
Dear Jeff377兄 我已將程序宣告在private區了,但還是不行,請看我以下的程式,呼叫程序那行是否錯掉了,謝謝。
procedure TForm1.PageControl1Change(Sender: TObject);
  var J : integer;
begin
  DBGrid1.Parent := PageControl1.ActivePage;
  J := PageControl1.ActivePageIndex;
  with AdoTable1 do
  begin
  AdoTable1.Active := False;
  AdoTable1.Filter := 'Grade='   IntToStr(ClassViewPage[J]);
  AdoTable1.Filtered := True;
  AdoTable1.Active := True;
  end;
  SetGridColumns(DBGrid1);
end;
jeff377
初階會員


發表:9
回覆:60
積分:33
註冊:2004-08-10

發送簡訊給我
#9 引用回覆 回覆 發表時間:2005-07-20 11:48:02 IP:61.56.xxx.xxx 未訂閱
你宣告在表單的private,而表單的為TForm1,所以在實作區的函數應為
procedure TForm1.SetGridColumns(DBGrid: TDBGrid);
begin
  DBGrid.Columns[0].Width := 30;
  DBGrid.Columns[1].Width := 100;
  DBGrid.Columns[2].Visible := False;
  DBGrid.Columns[3].Width := 100;
  DBGrid.Columns[4].Width := 100;
  DBGrid.Columns[5].Width := 100;
  DBGrid.Columns[6].Width := 100;
  DBGrid.Columns[7].Width := 100;
  DBGrid.Columns[8].Width := 100;
end;  
系統時間:2024-06-25 14:16:31
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!