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]