我自己做的小系统,因为有些报表需要打印,但是网上找了很多都不是很满意。有没有哪种打印控件可以实现定制打印的呢,就是指定打印页面上哪些内容。有没有御览无所谓。我找过 
  <OBJECT   id=wb   height=0   width=0     
  classid=CLSID:8856F961-340A-11D0-A96B-00C04FD705A2   name=wb></OBJECT>   这个在vs里面一编译就会加很多代码,点击打印页没有反应,看之前的帖子说没法解决。我希望能用服务器代码解决,因为对javascript实在不熟。实在不行能解决也可以。分不够尽管要,我可以在加。

解决方案 »

  1.   

    public void PrintToExcel(Page mypage)
            {
              mypage.Response.Clear(); 
                mypage.Response.Buffer= true;
                mypage.Response.Charset="gb2312";
                mypage.Response.AppendHeader("Content-Disposition","attachment;filename=FileFlow.xls"); 
                mypage.Response.ContentEncoding=System.Text.Encoding.GetEncoding("gb2312");   
                mypage.Response.ContentType = "application/ms-excel";           mypage.EnableViewState = false; 
                System.IO.StringWriter oStringWriter = new System.IO.StringWriter();           System.Web.UI.HtmlTextWriter oHtmlTextWriter = new System.Web.UI.HtmlTextWriter(oStringWriter);
                foreach (Control c in mypage.Controls)
                {
                    foreach (Control childc in c.Controls)
                    {
                        if (childc is Label)
                        {    
                            childc.RenderControl(oHtmlTextWriter);
                        }
                        if (childc is DataGrid)
                        {    
                            childc.RenderControl(oHtmlTextWriter);
                        }
                    }
                }            mypage.Response.Write(oStringWriter.ToString());           mypage.Response.End();
            }   顺便问一下,我之前用过这样的函数打印到excel,以前是可以的,现在不知道怎么回事执行总是有问题。这个有问题吗。
      

  2.   

    ----同意,
    用js 吧,直接调用ie print方法应该可以!
      

  3.   

    你把数据放入数据控件后
     第一步
     写一个方法:         public void Myprint()
              {
             Response.Charset = "GB2312";
            Response.ContentEncoding = System.Text.Encoding.UTF7;
            Response.AppendHeader("Content-Disposition", "attachment;filename=" +HttpUtility.UrlEncode("XXX.xls", System.Text.Encoding.UTF8).ToString());
            Response.ContentType = "application/ms-excel";
            this.EnableViewState = false;
            
            System.IO.StringWriter tw = new System.IO.StringWriter();
            HtmlTextWriter hw = new HtmlTextWriter(tw);
            this.GridView1.RenderControl(hw);
            Response.Write(tw.ToString());
            Response.End();
    }
      上面的Gridview是数据显示控件,当然也可以用其他数据控件
      
      另外 还必须重写一个方法(否则会报错'Gridview必须有runat=server标记'):  public override void VerifyRenderingInServerForm(Control control)
        {    }
      

  4.   

    this.GridView1.RenderControl(hw);
      

  5.   

    <script type ="text/javascript">
    function preview()
    {
    bdhtml=window.document.body.innerHTML;
    sprnstr="<!--startprint-->";
    eprnstr="<!--endprint-->";
    prnhtml=bdhtml.substr(bdhtml.indexOf(sprnstr)+17);
    prnhtml=prnhtml.substring(0,prnhtml.indexOf(eprnstr));
    window.document.body.innerHTML=prnhtml;
    window.print();
    }
    </script>想打哪部分就把哪部分用<!--startprint-->和<!--endprint-->包起来例如想打页面上的一个table里的东西
    :
    <!--startprint-->
    <table>
    ..............
    </table>
    <!--endprint-->
      

  6.   


    //添加样式,指定打印。
    <!--media=print 这个属性可以在打印时有效--> 
    <style media=print> 
    .Noprint{display:none;} 
    .PageNext{page-break-after: always;} 
    </style> //指定非打印区域
    <div id="div1" class="Noprint" > 
    <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);">
    </div><table >
    ...//打印
    </table>
      

  7.   

    IEWebBrowser这个组件的execWB方法整理﹐希望对大家有所帮助。  
    1.  <object id="WebBrowser" width=0 height=0 classid="CLSID:8856F961-340A-11D0-A96B-00C04FD705A2"> </object>  
    2. 调用方法。  
    WebBrowser.ExecWB nCmdID, nCmdExecOpt, [pvaIn], [pvaOut]  
    3. 参数说明。  
    (a).nCmdID  
    OLECMDID_OPEN = 1,  
    OLECMDID_NEW = 2,  
    OLECMDID_SAVE = 3,  
    OLECMDID_SAVEAS = 4,  
    OLECMDID_SAVECOPYAS = 5,  
    OLECMDID_PRINT = 6,  
    OLECMDID_PRINTPREVIEW = 7,  
    OLECMDID_PAGESETUP = 8,  
    OLECMDID_SPELL = 9,  
    OLECMDID_PROPERTIES = 10,  
    OLECMDID_CUT = 11,  
    OLECMDID_COPY = 12,  
    OLECMDID_PASTE = 13,  
    OLECMDID_PASTESPECIAL = 14,  
    OLECMDID_UNDO = 15,  
    OLECMDID_REDO = 16,  
    OLECMDID_SELECTALL = 17,  
    OLECMDID_CLEARSELECTION = 18,  
    OLECMDID_ZOOM = 19,  
    OLECMDID_GETZOOMRANGE = 20  
    OLECMDID_UPDATECOMMANDS = 21  
    OLECMDID_REFRESH = 22  
    OLECMDID_STOP = 23  
    OLECMDID_HIDETOOLBARS = 24  
    OLECMDID_SETPROGRESSMAX = 25  
    OLECMDID_SETPROGRESSPOS = 26  
    OLECMDID_SETPROGRESSTEXT = 27  
    OLECMDID_SETTITLE = 28  
    OLECMDID_SETDOWNLOADSTATE = 29  
    OLECMDID_STOPDOWNLOAD = 30  
    上面的关键词都可以在浏览器的菜单里面找到对应的选项﹐大家一看就明白的﹗  
    (b).nCmdExecOpt  
    OLECMDEXECOPT_DODEFAULT = 0,  
    OLECMDEXECOPT_PROMPTUSER = 1,  
    LECMDEXECOPT_DONTPROMPTUSER = 2,  
    OLECMDEXECOPT_SHOWHELP = 3  
    对于这个参数﹐一般来说﹐选1就可以了。 这是调用IE的”另存为”功能的示例﹕ <object id="WebBrowser" width=0 height=0 classid="CLSID:8856F961-340A-11D0-A96B-00C04FD705A2"> </object> 
    <A href="javascript:WebBrowser.ExecWB(4,1);">Save-存储 </A>