請問一個PageControl與DBGrid間的公用程序問題 |
尚未結案
|
chateau_frank
一般會員 發表:20 回覆:32 積分:10 註冊:2005-07-07 發送簡訊給我 |
各位大大午安 【新手發問】
我用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 發送簡訊給我 |
|
jeff377
初階會員 發表:9 回覆:60 積分:33 註冊:2004-08-10 發送簡訊給我 |
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 發送簡訊給我 |
|
wameng
版主 發表:31 回覆:1336 積分:1188 註冊:2004-09-16 發送簡訊給我 |
建議:
使用一個 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 發送簡訊給我 |
|
jeff377
初階會員 發表:9 回覆:60 積分:33 註冊:2004-08-10 發送簡訊給我 |
宣告在表單的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 發送簡訊給我 |
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 發送簡訊給我 |
你宣告在表單的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; |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |