日本国产亚洲-日本国产一区-日本国产一区二区三区-日本韩国欧美一区-日本韩国欧美在线-日本韩国欧美在线观看

當前位置:雨林木風下載站 > 技術開發教程 > 詳細頁面

在動態報表制作中靈活運用DBGRID

在動態報表制作中靈活運用DBGRID

更新時間:2022-05-10 文章作者:未知 信息來源:網絡 閱讀次數:

在Delphi中,編程人員利用Quick Report控件可以方便地設計和實現靜態報表,但對動態報表的制作仍有不便之處。如制作一個列表式報表時,如何動態調節每一列的寬度?由于報表在預覽情況下不能修改,只能在預覽前將寬度設定好,因此,如何比較方便地預先設定寬度,就成了一個需要解決的問題。
分析問題
首先可想到一種笨辦法,就是在確定報表中需要顯示的字段后,對每一個字段的寬度賦予一個初始值(比如80),對于需要調整的字段再通過編輯框進行輸入修改。這樣的確可以達到預期目的,但由于不直觀,可能需要多次調整,影響了效率和方便性。
筆者通過實踐,利用DBGRID解決了這個問題。由于是制作與數據庫相關的報表,其報表記錄肯定需要通過一個SQL語句來產生,那么這些記錄就可以先顯示在一個DBGRID中。由于DBGRID的各列寬度可以動態調節,那么將適當的DBGRID的各列寬度賦給報表中的各列,就一次性達到了我們預期的目的,而且操作非常方便。
設置窗體
建立兩個窗體mainform和repform。在mainform上放置edit1、datasource1、query1、dbgrid1、button1(caption為“提取數據”)和button2(caption為“預覽報表”),將datasource1.dataset設定為query1,將dbgrid1的datasource設定為datasource1。在repform上放置Quickrep1,并至少將Quickrep1.bands.hascolumnband和Quickrep1.bands.hasdetailband設為true。
編程實現
運行時,在edit1中輸入正確的 SQL語句。點擊“提取數據”按鈕,將相應記錄顯示在 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;
點擊“預覽報表”按鈕,可以看到形成的報表,如果對寬度擺放還有些不滿意,可以關閉預覽窗口后重新調整。具體的程序代碼如下:
procedure Tmainform.button2click(sender:TObject);
var leftv,i:integer; //leftv為報表起始位置
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;
    //顯示記錄內容
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();//報表預覽
  end; 

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

本類教程下載

系統下載排行

主站蜘蛛池模板: 亚洲成在人天堂一区二区 | 久久国产精品国语对白 | 精品午夜寂寞影院在线观看 | 国产亚洲精品线观看77 | 成人精品区 | 久久久久久久久久久观看 | 国产亚洲精品免费 | 免费岛国小视频在线观看 | 中文字幕亚洲精品卡通动漫 | 亚洲 欧美 卡通 在线 另类 | 在线观看欧美 | a毛片毛费观看 | 亚洲精品中文字幕乱码三区 | 久久综合狠狠综合久久 | 久久国产精品一区二区 | 水蜜桃污| 午夜久久久久久 | 手机亚洲第一页 | 亚洲第一伊人 | 日皮视频在线观看 | 97久久人人做人人爽人人澡 | 国产精品国产午夜免费福利看 | 色视频一区二区三区 | 99热这里只有精品2 99热这里只有精品6免费 | 国产精品视频全国免费观看 | 国产成人精品永久免费视频 | 91久久综合九色综合欧美亚洲 | 精品国产精品a | 国产成人综合网亚洲欧美在线 | 女人被狂躁的视频免费动图 | 国产成人一区二区三区免费观看 | 欧美成人影院免费观 | 久久96国产精品久久久 | 精品午夜寂寞黄网站在线 | 午夜影院在线免费观看 | 亚洲欧美日韩伦中文 | 国产精品成人免费综合 | 免费国产人做人视频在线观看 | 日韩精品一区二区三区免费视频 | 91高清视频在线观看 | 视频一区二区欧美日韩在线 |