• <label id="pxtpz"><meter id="pxtpz"></meter></label>
      1. <span id="pxtpz"><optgroup id="pxtpz"></optgroup></span>

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

        在動態報表制作中靈活運用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; 

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

        本類教程下載

        系統下載排行

        主站蜘蛛池模板: 青草久久精品亚洲综合专区| 亚洲无线码一区二区三区| 亚洲视频一区调教| 久久久国产精品福利免费| 亚洲国产精品福利片在线观看| 日本19禁啪啪无遮挡免费动图| 亚洲13又紧又嫩又水多| 西西大胆无码视频免费| 亚洲综合激情五月丁香六月| 亚洲五月午夜免费在线视频| 亚洲国产综合人成综合网站| 中文字幕亚洲精品| 免费v片在线观看视频网站| 亚洲一欧洲中文字幕在线| 在线观看成人免费| 亚洲精品国产日韩无码AV永久免费网| 黄网站在线播放视频免费观看| 亚洲一区二区精品视频| 成人无码WWW免费视频| 亚洲第一成年网站大全亚洲| 久久久久久国产精品免费免费| 亚洲爆乳无码专区www| 亚洲国产精品狼友中文久久久| 国产中文字幕在线免费观看| 亚洲电影国产一区| 女人被男人桶得好爽免费视频| 国产亚洲日韩在线a不卡| 亚洲成色WWW久久网站| 99在线精品免费视频九九视| 亚洲第一综合天堂另类专| 中文字幕亚洲综合久久男男| 在线视频亚洲一区| 亚洲精品高清国产一线久久| 999国内精品永久免费视频| 蜜桃传媒一区二区亚洲AV| 国产精品国产亚洲精品看不卡| 中国在线观看免费国语版| 久久免费99精品国产自在现线| 亚洲成a人片在线观看播放| 亚洲人成人无码网www国产| 99在线精品视频观看免费|