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