3

不知道从哪里开始我收到的这个请求。我已将数据从 gridviews 导出到 excel 和 word。将 CSS 样式表传递给两者,从 gridview 创建各种打印。这个让我不知道从哪里开始。最初认为我可以从 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。我无法弄清楚如何捕获隐藏字段中的主键并构建一个字符串,其中每个主键值用逗号分隔。我打算使用该字符串并弹出一个新窗口以检索数据。


    function fcnValidateCheckBoxes() {

        var isValid = false;
        var gridView = document.getElementById("<%=GridView1.ClientID %>");
        var MyPkeyString = ""

        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) {
                        isValid = true;
                        return true;
                    }
                }
            }
        }


        if (isValid == "true") {
           ***** Not sure what goes here to build the string of primary keyes. **
        } else {
            alert("You must select at least one checkbox");
            return false;
        }
    }
4

3 回答 3

1

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

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 + ';';
                }
            }
        }
    }
}

现在您有了一个由分号分隔的所有相关主键的列表,您只需将其传递到下一页。我不确定你想怎么做(你只是说你想要一个弹出窗口),所以这里有一个带有window.openGET 请求的快速示例:

window.open('Print.aspx?ids=' + encodeURIComponent(primaryKeys));

在后面的代码中:

string params = Request.Querystring("ids");
string[] ids = params.split(';');
于 2013-06-18T00:18:47.977 回答
0

在填充弹出窗口的模块中,在内容之间插入以下内容

This is the text for page #1.

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

Page #2...

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

Page #3...
于 2013-06-11T12:00:38.520 回答
0

使用该 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();
    }

在 aspx 页面中获取空白表。

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

希望它可以帮助你。

于 2013-06-11T13:09:25.330 回答