欧美特黄不卡,涩涩视频在线,成人国产精品一区二区网站,亚洲一区二区三区欧美

當(dāng)前位置:雨林木風(fēng)下載站 > 技術(shù)開發(fā)教程 > 詳細(xì)頁面

在動態(tài)報(bào)表制作中靈活運(yùn)用DBGRID

在動態(tài)報(bào)表制作中靈活運(yùn)用DBGRID

更新時(shí)間:2022-05-10 文章作者:未知 信息來源:網(wǎng)絡(luò) 閱讀次數(shù):

在Delphi中,編程人員利用Quick Report控件可以方便地設(shè)計(jì)和實(shí)現(xiàn)靜態(tài)報(bào)表,但對動態(tài)報(bào)表的制作仍有不便之處。如制作一個(gè)列表式報(bào)表時(shí),如何動態(tài)調(diào)節(jié)每一列的寬度?由于報(bào)表在預(yù)覽情況下不能修改,只能在預(yù)覽前將寬度設(shè)定好,因此,如何比較方便地預(yù)先設(shè)定寬度,就成了一個(gè)需要解決的問題。
分析問題
首先可想到一種笨辦法,就是在確定報(bào)表中需要顯示的字段后,對每一個(gè)字段的寬度賦予一個(gè)初始值(比如80),對于需要調(diào)整的字段再通過編輯框進(jìn)行輸入修改。這樣的確可以達(dá)到預(yù)期目的,但由于不直觀,可能需要多次調(diào)整,影響了效率和方便性。
筆者通過實(shí)踐,利用DBGRID解決了這個(gè)問題。由于是制作與數(shù)據(jù)庫相關(guān)的報(bào)表,其報(bào)表記錄肯定需要通過一個(gè)SQL語句來產(chǎn)生,那么這些記錄就可以先顯示在一個(gè)DBGRID中。由于DBGRID的各列寬度可以動態(tài)調(diào)節(jié),那么將適當(dāng)?shù)腄BGRID的各列寬度賦給報(bào)表中的各列,就一次性達(dá)到了我們預(yù)期的目的,而且操作非常方便。
設(shè)置窗體
建立兩個(gè)窗體mainform和repform。在mainform上放置edit1、datasource1、query1、dbgrid1、button1(caption為“提取數(shù)據(jù)”)和button2(caption為“預(yù)覽報(bào)表”),將datasource1.dataset設(shè)定為query1,將dbgrid1的datasource設(shè)定為datasource1。在repform上放置Quickrep1,并至少將Quickrep1.bands.hascolumnband和Quickrep1.bands.hasdetailband設(shè)為true。
編程實(shí)現(xiàn)
運(yùn)行時(shí),在edit1中輸入正確的 SQL語句。點(diǎn)擊“提取數(shù)據(jù)”按鈕,將相應(yīng)記錄顯示在 dbgrid1中。具體的程序代碼如下:
procedure Tmainform.button1click(sender:TObject);
  var s:string;
  begin
   s:=edit1.text;
   with query1 do
   begin
    close;
    sql.clear;
    sql.add(s);
    open;
   end;
  end;
點(diǎn)擊“預(yù)覽報(bào)表”按鈕,可以看到形成的報(bào)表,如果對寬度擺放還有些不滿意,可以關(guān)閉預(yù)覽窗口后重新調(diào)整。具體的程序代碼如下:
procedure Tmainform.button2click(sender:TObject);
var leftv,i:integer; //leftv為報(bào)表起始位置
cheader:Tqrlabel;
detailtext:Tqrdbtext;
……
  begin
   leftv:=0;
   for i:=0 to dbgrid1.columns.Count-1 do
    begin
     cheader:=TQrlabel.Create(repform);
with repform.cheader do
begin
parent:=repform.columnheaderband1;
caption:=dbgrid1.columns[i].fieldname;
width:=dbgrid1.columns[i].width;
height:=repform.columnheaderband1.height; left:=leftv+2;
top:=5;
end;
……//在leftv 處畫表格豎線
leftv:=dbgrid1.columns[i].width+leftv;
end;
……//畫表頭欄邊框。起始位為0,總寬度為leftv,也就是dbgrid1的各列寬度之和
leftv:=0;
    //顯示記錄內(nèi)容
for i:=0 to dbgrid1.columns.Count-1 do
begin
detailtext:=TQrdbtext.create(repform);
with repform.detailtext do
begin
parent:=repform.detailband1;
dataset:=query1;
datafield:=dbgrid1.columns[i].fieldname;
width:=dbgrid1.columns[i].width;
height:=repform.detailband1.height;
left:=leftv+2;
top:=5;
end;
……//在leftv 處畫表格豎線
leftv:=dbgrid1.columns[i].width+leftv;
end;
……// 畫明晰欄邊框。
repform.quickrep1.preview();//報(bào)表預(yù)覽
  end; 

溫馨提示:喜歡本站的話,請收藏一下本站!

本類教程下載

系統(tǒng)下載排行

主站蜘蛛池模板: 米林县| 化德县| 罗城| 鸡泽县| 舒兰市| 乌拉特前旗| 抚顺县| 钟山县| 曲沃县| 砚山县| 资中县| 益阳市| 灵台县| 延长县| 禄丰县| 石屏县| 阜康市| 婺源县| 平武县| 抚远县| 荣成市| 姜堰市| 博乐市| 额尔古纳市| 汕尾市| 疏附县| 顺平县| 玛纳斯县| 济南市| 清原| 灵丘县| 临邑县| 邛崃市| 宝兴县| 南阳市| 微山县| 信丰县| 西和县| 石景山区| 巨野县| 溧阳市|