杰表技术论坛 's Archiver

admin 发表于 2010-1-6 11:52

ASP.NET实现套打(转)

原文出处 [url]http://blog.csdn.net/qiong12/archive/2009/02/03/38603081.aspx[/url]


忙了一天,终于把HR系统的代扣明细报表的套打搞定了,

细数历程,感觉应该记载些东西下来。
我是采用jatoolsPrinter.cab控件进行打印的,此控件根据page1、page2、。。。命名的div进行打印,此需要在<head></head>中插入以下JAVASCRIPT代码:
<OBJECT ID="jatoolsPrinter" CLASSID="CLSID:B43D3361-D075-4BE2-87FE-057188254255" codebase="jatoolsP.cab#version=1,1,6,5"></OBJECT>
    <script language=javascript type="text/javascript">
        function expandcollapse(obj,row)
        {
            var div = document.getElementById(obj);
            var img = document.getElementById('img' + obj);
            if (div.style.display == "none")
            {
                div.style.display = "block";
                if (row == 'alt')
                {
                    img.src = "../Images/minus.gif";
                }
                else
                {
                    img.src = "../Images/minus.gif";
                }
            }
            else
            {
                div.style.display = "none";
                if (row == 'alt')
                {
                    img.src = "../Images/plus.gif";
                }
                else
                {
                    img.src = "../Images/plus.gif";
                }
            }
        }

        function doPrint()
               {
            var divs = document.getElementsByTagName("div");
            for(var i=0;i<divs.length;i++)
            {
                if (divs[i].id.indexOf("page")>=0)
                {
                    divs[i].style.display = "block";
                }
            }
            myreport = {
               print_settings:{orientation : 1},documents:document,copyrights:'};
               jatoolsPrinter.printPreview(myreport);   
           }
    </script>
为了动态创建DIV并给取命名,我采用在GRIDVIEW中创建一Columns,此COLUMN为一TemplateField,然后在这其中加入一个DIV,此GRIDVIEW的命名规则即为page#。
<a href="javascript:expandcollapse('page<%# ++counter %>', 'one');">
                            <img id="imgpage<%# counter %>" border="1" src="../Images/plus.gif"/>
                        </a>
counter在apx.cs中定义:public int counter=0;
在此DIV中嵌入各种控件,即为每页要打印的内容,在protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)触发事件进行DIV里面的GRIDVIEW赋值:
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        GridViewRow row = e.Row;
        if (row.DataItem != null)
        {
            GridView gv = new GridView();
            gv = (GridView)row.FindControl("GridView2");
            string page = ((suCutSalaryPage)e.Row.DataItem).页;
            int nPage = Int32.Parse(page);

DataTable dt = _list2[nPage - 1];
            gv.DataSource = dt;
            gv.DataBind();
        }
    }

页: [1]

Powered by Discuz! Archiver 6.1.0  © 2001-2007 Comsenz Inc.