4

我正在制作一个使用滚动的gridview,因为列比我的网页的页面宽度还多。问题是当我想打印它时只打印显示的数据。如何打印 div 或面板中的所有内容?

我的网格视图代码:

<a href="#" onclick="printPartOfPage('content-middle')" >PRINT ME </a>

<asp:Panel ID="gridPanel" runat="server" Height="500px" Width="980px" ScrollBars="Auto">


   <asp:GridView EnableSortingAndPagingCallbacks="true" Width="450px" 
            OnRowCreated="GridView1_RowCreated" runat="server" ID="GridView2" 
          CellPadding="4" ForeColor="#333333" GridLines="None" 
            >

                 <AlternatingRowStyle BackColor="White" ForeColor="#284775" />

                 <Columns>

                     <asp:HyperLinkField DataNavigateUrlFields="ID" 
                         DataNavigateUrlFormatString="updateAppointmentOperations.aspx?showID={0}" Text="Update " 
                         Target="_blank" />
                 </Columns>

                 <EditRowStyle BackColor="#999999" />
                 <FooterStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
                 <HeaderStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
                 <PagerStyle BackColor="#284775" ForeColor="White" HorizontalAlign="Center" />
                 <RowStyle BackColor="#F7F6F3" ForeColor="#333333" />
                 <SelectedRowStyle BackColor="#E2DED6" Font-Bold="True" ForeColor="#333333" />
                 <SortedAscendingCellStyle BackColor="#E9E7E2" />
                 <SortedAscendingHeaderStyle BackColor="#506C8C" />
                 <SortedDescendingCellStyle BackColor="#FFFDF8" />
                 <SortedDescendingHeaderStyle BackColor="#6F8DAE" />

             </asp:GridView>

    </asp:Panel>

我从互联网上得到的 javascript 打印是:

<script type="text/javascript">

function printPartOfPage(elementId) {
    var printContent = document.getElementById(elementId);
    var windowUrl = 'about:blank';
    var uniqueName = new Date();
    var windowName = 'Print' + uniqueName.getTime();
    var printWindow = window.open(windowUrl, windowName, 'left=50000,top=50000,width=0,height=0');

    printWindow.document.write('<link rel="stylesheet" type="text/css" href="style/additional.css" /><link rel="stylesheet" type="text/css" href="style/default.css" /><link rel="stylesheet" type="text/css" href="style/hi-res.css" />' + printContent.innerHTML);
    printWindow.document.close();
    printWindow.focus();
    printWindow.print();
    printWindow.close();
}

网格视图位于 id 内容中间的 div 中。

谢谢

4

3 回答 3

3

您可以在页面上包含另一个 GridView,它仅用于打印。

切换显示哪一个的方法是酌情用 CSS 类装饰这两个。

例如:

<style>
@media print {
    .PrintOnly { display:block; }
    .ScreenOnly { display:none; }
  }
  @media screen {
    .PrintOnly { display:none; }
    .ScreenOnly { display:block; }
  }
</style>
于 2012-03-19T19:43:33.250 回答
1

有几种方法可以做到这一点。可能对用户最友好的方式是使用 css 使用 @media 指令设置不同的显示和打印样式。不用设置 dridPanel 的高度和宽度属性,而是使用 css 设置高度和宽度 - 当媒体为“屏幕”时为 500 和 980,而当媒体为打印时,只需将宽度设置为 100%。(让 hdight 保持原样,它应该显示一切)

有关@media css 指令的更多信息可以在这里找到: http: //www.w3schools.com/CSS/css_mediatypes.asp

有一篇关于使用 css 使您的页面对打印机友好的好文章:http ://www.envisionic.com/webtips/user_experience/printer_friendly.php

于 2012-03-19T19:40:18.977 回答
0

好的 - 这是可能的,但我真的会劝阻你不要这样做。利用 Crystal Reports 或其他任何东西。甚至有几个使用 RDL 的开源报告解决方案。

你在 Crystal 中可以在 30 分钟内完成的事情需要更长的时间。我做了大量的研究,看看是否有可能。MSDN 有一篇文章有​​效

http://msdn.microsoft.com/en-us/library/aa479018.aspx

它介入并定义了 system.web.ui.page 的替代方案,我不得不承认它做得非常好。我不得不做一个小调整,因为用户想要一个页面行计数器。

我可以再次证明它有效 - 分页、列标题、控制中断、可以总计列。如果您想控制利润,请考虑 MEADCO(我认为)javascript 库。此外,它还包含逻辑,因此用户也可以翻页,但我无法让它工作。但考虑到我只有 3 个月的 ASP 经验 - 可能很容易解决。

欢迎您使用我的 VS 2010 DLL 解决方案。让我知道我是否可以提供帮助。

于 2014-11-12T21:07:51.510 回答