Asp.net 从gridview创建打印,其中每个记录位于单独的页面上

Asp.net 从gridview创建打印,其中每个记录位于单独的页面上,asp.net,Asp.net,我不知道从哪里开始处理我收到的请求。我已经将数据从GridView导出到excel和word。将CSS样式表传递给两者,从gridview创建各种打印。这件事让我左右为难,不知从何说起。最初我认为我可以从gridview的选定行创建个性化的数据表,并生成可打印的报告 基本上这就是我需要做的。我有一个显示一些记录的girdview。用户需要通过复选框选择要打印的行,然后选择打印按钮。按下按钮后,弹出窗口将一次显示一页每个记录的详细信息 以下是gridview: <asp:GridView I

我不知道从哪里开始处理我收到的请求。我已经将数据从GridView导出到excel和word。将CSS样式表传递给两者,从gridview创建各种打印。这件事让我左右为难,不知从何说起。最初我认为我可以从gridview的选定行创建个性化的数据表,并生成可打印的报告

基本上这就是我需要做的。我有一个显示一些记录的girdview。用户需要通过复选框选择要打印的行,然后选择打印按钮。按下按钮后,弹出窗口将一次显示一页每个记录的详细信息

以下是gridview:

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" 
    BackColor="White" BorderColor="#999999" BorderStyle="Solid" BorderWidth="1px" 
    CellPadding="5" CellSpacing="1"
    DataSourceID="SqlDataSource1" ForeColor="Black" GridLines="Vertical" AllowSorting="True">
    <FooterStyle BackColor="#CCCCCC" />
    <Columns>

        <asp:TemplateField HeaderText="Process">
            <ItemTemplate>
                <asp:CheckBox runat="server" ID="chkSelect"  />
                <asp:HiddenField ID="hdnPkey" Value='<%# Bind("Pkey") %>' runat="server" />
            </ItemTemplate>
            <HeaderTemplate>
                <input id="chkAll" onclick="javascript:SelectAllCheckboxes(this, 'chkSelect');" runat="server" type="checkbox" />
            </HeaderTemplate>
            <HeaderStyle HorizontalAlign="Center" />
            <ItemStyle HorizontalAlign="Center" />
        </asp:TemplateField>


        <asp:BoundField DataField="CreatedBy" HeaderText="Requestor" SortExpression="CreatedBy">
            <HeaderStyle HorizontalAlign="left" />
            <ItemStyle HorizontalAlign="left" />
        </asp:BoundField>

        <asp:BoundField DataField="Office" HeaderText="Office" SortExpression="Office">
            <HeaderStyle HorizontalAlign="center" />
            <ItemStyle HorizontalAlign="center" />
        </asp:BoundField>

        <asp:BoundField DataField="DeptCode" HeaderText="Department" SortExpression="DeptCode">
            <HeaderStyle HorizontalAlign="Left" />
            <ItemStyle HorizontalAlign="Left" />
        </asp:BoundField>

        <asp:BoundField DataField="ZoneName" HeaderText="Zone" SortExpression="ZoneName">
            <HeaderStyle HorizontalAlign="Left" />
            <ItemStyle HorizontalAlign="Left" />
        </asp:BoundField>

        <asp:BoundField DataField="EffectiveDate" HeaderText="Effective Date" DataFormatString = "{0:d}"  SortExpression="EffectiveDate">
            <HeaderStyle HorizontalAlign="center" />
            <ItemStyle HorizontalAlign="center" />
        </asp:BoundField>

    </Columns>
    <PagerStyle BackColor="#999999" ForeColor="Black" HorizontalAlign="Center" />
    <SelectedRowStyle BackColor="#000099" Font-Bold="True" ForeColor="White" />
    <HeaderStyle BackColor="Silver" Font-Bold="True" ForeColor="Black" />
    <AlternatingRowStyle BackColor="#CCCCCC" />
</asp:GridView>

*以下是客户端上的javascript,我用来验证以确保选中复选框。我不知道如何捕获hiddenfield中的主键并构建一个字符串,其中每个主键值都用逗号分隔。我打算用这个字符串打开一个新窗口来检索数据


函数fcnValidateCheckbox(){
var isValid=false;
var gridView=document.getElementById(“”);
var MyPkeyString=“”
对于(var i=1;i
在填充弹出窗口的模块中,在内容之间插入以下内容

This is the text for page #1.

<p style="page-break-before: always">

Page #2...

<p style="page-break-before: always">

Page #3...
这是第1页的文本。

第2页。。。

第3页。。。


将该Jquery代码用于所选记录的分页符

$(document).ready(function () {
        $("#btnPrint").live("click", function (e) {
            $('#tblFinal').append('<tr>' + $('#GridView1 tr:eq(0)').html() + '</tr>');
            $('#GridView1 tr [type="checkbox"]').each(function (index) {
                if ($(this).is(":checked")) {
                    $('#tblFinal').append('<tr>' + $('#GridView1 tr:eq(' + index + ')').html() + '</tr>');
                    $(this).attr('checked', false);
                }
            });
            $('#tblFinal tr').append('<p style="page-break-after: always"></tr>');
            printDiv();
        });
    });

    function printDiv() {
        var divToPrint = document.getElementById('tblFinal');
        newWin = window.open("");
        newWin.document.write(divToPrint.outerHTML);           
        newWin.print();
        newWin.close();
    }
$(文档).ready(函数(){
$(“#btnPrint”).live(“单击”,函数(e){
$('#tblFinal').append('+$('#GridView1 tr:eq(0')).html()+'');
$(“#GridView1 tr[type=“checkbox”]”)。每个(函数(索引){
如果($(this).is(“:checked”)){
$('tblFinal').append('+$('GridView1 tr:eq('+index+')).html()+'');
$(this.attr('checked',false);
}
});
$('tblFinal tr').append('p style=“page break after:always”>');
printDiv();
});
});
函数printDiv(){
var divToPrint=document.getElementById('tblFinal');
newWin=window.open(“”);
newWin.document.write(divToPrint.outerHTML);
newWin.print();
newWin.close();
}
在aspx页面中取空白表格

<table id="tblFinal">
    </table>


希望它能帮助您。

有很多方法可以获取隐藏字段的值。因为您已经有了循环,所以我决定添加几行,通过选中复选框获得每行的主键。我假设隐藏字段是复选框后的下一个输入字段:

var primaryKeys = '';
for (var i = 1; i < gridView.rows.length; i++) {
    var inputs = gridView.rows[i].getElementsByTagName('input');
    if (inputs != null) {
        if (inputs[0].type == "checkbox") {
            if (inputs[0].checked) {
                if(inputs.length > 1 && inputs[1].type == "hidden")
                {
                    primaryKeys += inputs[1].value + ';';
                }
            }
        }
    }
}
在代码隐藏中:

string params = Request.Querystring("ids");
string[] ids = params.split(';');

你的意思是它应该为每个选中的记录打开一个弹出窗口吗?否打印的弹出窗口应该包含所有选中的记录,每个记录后都有一个分页符。我不确定如何获取数据来构建页面。我知道如何验证checkbox字段,但我不知道如何为隐藏字段中的获取prirmary键。我在上面的代码中添加了javascript。谢谢你的帮助。
window.open('Print.aspx?ids=' + encodeURIComponent(primaryKeys));
string params = Request.Querystring("ids");
string[] ids = params.split(';');