请问ASP.NET中数据的打印策略?现在要做一个OA系统,需要打印报表。我不知道怎么作好,我想这样作:
当用户查看数据时,用DataGrid等控件罗列数据,这个网页可以做得花花绿绿很花哨。用户通过每一个Item的CheckBox,选择要打印的行,当用户按下“打印”按钮时,跳到另外一个白低黑字的网页去,只是显示所选数据,没有花哨的东西,用于打印。
这就有个问题:怎样把“查看网页”的数据传到“打印网页”?
请牛人帮我想想好的解决方法,谢谢

解决方案 »

  1.   

    先给一个简单实用的方式(可以打印多页,控制分页,隐藏非打印项目)
    <!--语言无关 保存成 .HTML 看看-->
    <html>
    <head>
    <meta name=vs_targetSchema content="http://schemas.microsoft.com/intellisense/ie5">
    <title>看看</title>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
    <!--media=print 这个属性可以在打印时有效-->
    <style media=print>
    .Noprint{display:none;}
    .PageNext{page-break-after: always;}
    </style><style>
    .tdp
    {
        border-bottom: 1 solid #000000;
        border-left:  1 solid #000000;
        border-right:  0 solid #ffffff;
        border-top: 0 solid #ffffff;
    }
    .tabp
    {
        border-color: #000000 #000000 #000000 #000000;
        border-style: solid;
        border-top-width: 2px;
        border-right-width: 2px;
        border-bottom-width: 1px;
        border-left-width: 1px;
    }
    .NOPRINT {
    font-family: "宋体";
    font-size: 9pt;
    }</style></head><body >
    <center class="Noprint" >
      <p>
      <OBJECT  id=WebBrowser  classid=CLSID:8856F961-340A-11D0-A96B-00C04FD705A2  height=0  width=0>
      </OBJECT>
      <input  type=button  value=打印          onclick=document.all.WebBrowser.ExecWB(6,1)>
      <input  type=button  value=直接打印  onclick=document.all.WebBrowser.ExecWB(6,6)>
      <input  type=button  value=页面设置  onclick=document.all.WebBrowser.ExecWB(8,1)>
    </p>
      <p>    <input  type=button  value=打印预览  onclick=document.all.WebBrowser.ExecWB(7,1)>
        <br/>
        </p>
      <hr align="center" width="90%" size="1" noshade>
    </center><table width="90%" border="0" align="center" cellpadding="2" cellspacing="0"  class="tabp">
    <tr>
      <td colspan="3" class="tdp">第1页</td>
        </tr>
    <tr>
       <td width="29%" class="tdp"> </td>
       <td width="28%" class="tdp"> </td>
          <td width="43%" class="tdp"> </td>
      </tr>
    <tr>
       <td colspan="3" class="tdp"> </td>
      </tr>
    <tr>
       <td colspan="3" class="tdp"><table width="100%"  border="0" cellspacing="0" cellpadding="0">
            <tr>
              <td width="50%" class="tdp"><p>这样的报表</p>
              <p>对一般的要求就够了。</p></td>
              <td> </td>
            </tr>
          </table></td>
      </tr>
    </table>
    <hr align="center" width="90%" size="1" noshade class="NOPRINT" >
    <!--分页-->
    <div class="PageNext"></div>
    <table width="90%" border="0" align="center" cellpadding="2" cellspacing="0"  class="tabp">
      <tr>
        <td class="tdp">第2页</td>
      </tr>
      <tr>
        <td class="tdp">看到分页了吧</td>
      </tr>
      <tr>
        <td class="tdp"> </td>
      </tr>
      <tr>
        <td class="tdp"> </td>
      </tr>
      <tr>
        <td class="tdp"><table width="100%"  border="0" cellspacing="0" cellpadding="0">
            <tr>
              <td width="50%" class="tdp"><p>这样的报表</p>
                  <p>对一般的要求就够了。</p></td>
              <td> </td>
            </tr>
        </table></td>
      </tr>
    </table>
    </body>
    </html>
    简单懂得 HTML CSS 即可。
    下面样式只在打印时有用 <style media=print>
    <style media=print>
    .Noprint{display:none;}
    .PageNext{page-break-after: always;}
    </style>WebBrowser 控件对象。只要是 win98 以上版本都有。
    其实配合“分页样式表”,和 HTML表格 一般的打印都可以实现的。如果想对 非Windows平台用户使用。
    请去掉下面这些:
    <center class="Noprint" >
      <p>
    <!--最主要是这个-->
      <OBJECT  id=WebBrowser  classid=CLSID:8856F961-340A-11D0-A96B-00C04FD705A2  height=0  width=0>
      </OBJECT>
      <input  type=button  value=打印          onclick=document.all.WebBrowser.ExecWB(6,1)>
      <input  type=button  value=直接打印  onclick=document.all.WebBrowser.ExecWB(6,6)>
      <input  type=button  value=页面设置  onclick=document.all.WebBrowser.ExecWB(8,1)>
    </p>
      <p>    <input  type=button  value=打印预览  onclick=document.all.WebBrowser.ExecWB(7,1)>
        <br/>
        </p>
      <hr align="center" width="90%" size="1" noshade>
    </center>控件的打印方式:http://www.uncj.net/bbs/viewFile.asp?Boardid=10&ID=832 
      

  2.   

    谢谢
    这个例子我看过。但是太泛泛。
    我的问题关键是“可选打印”,也就是说“打印网页”怎么知道用户在“查看网页中”点选了哪一些Item,然后又怎样罗列他们
      

  3.   

    这几个方法可以试一下,我还没有测试过,仅供参考:1、记录选中项得关键字段值,然后在执行查询select * from 表 where 关键字段 in ()
    2、把选中得项直接生成XML,然后再生成报表
    3、建一个临时表,选中一条记录,就插入一条记录,报表数据直接从临时表里去就好了
    ……
      

  4.   

    这种方法我也考虑过
    但是还有问题选中的数据,in()中的数据,怎么从一个网页传到另一个网页,保留在ViewState中?Session中?
    另一个网页取得数据以后,是不是要把他及时销毁掉呢?
      

  5.   

    可以这样:
    遍历datagrid,判断Item的CheckBox的状态,
    如果为选中的话,就把该行数据保存到datatable中
    为了页面间传值的需要,把datatable保存到session中
    按下“打印”按钮时,跳转到“打印网页”页面,
    将session中的datatable值取出,用datagrid显示,然后打印