【问题标题】:Export gridview in a pdf file in asp.net在asp.net中以pdf文件导出gridview
【发布时间】:2014-01-06 07:15:00
【问题描述】:

我想将gridview 导出到pdf 文件中。

源代码

<div id="divppdf" runat="server">
    <asp:GridView ID="grdLoanInquery" runat="server" AllowPaging="True" AutoGenerateColumns="False" DataKeyNames="PK_CustomerID" EmptyDataText="Record does not exists." Font-Bold="True" Font-Size="Small" Height="121px" PageSize="5" ShowFooter="True" Width="100%"
    OnPageIndexChanging="grdLoanInquery_PageIndexChanging" OnRowCommand="grdLoanInquery_RowCommand">
        <Columns>
            <asp:BoundField DataField="PK_CustomerID" HeaderText="ID" InsertVisible="False" ItemStyle-HorizontalAlign="Center" ItemStyle-VerticalAlign="Middle" ReadOnly="True" SortExpression="PK_CustomerID">
                <ItemStyle HorizontalAlign="Center" VerticalAlign="Middle" />
            </asp:BoundField>
            <asp:BoundField DataField="FirstName" HeaderText="Name" ItemStyle-HorizontalAlign="Center" ItemStyle-VerticalAlign="Middle" SortExpression="FirstName">
                <ItemStyle HorizontalAlign="Center" VerticalAlign="Middle" />
            </asp:BoundField>
            <asp:BoundField DataField="BillingAmt" HeaderText="Billing Amount" ItemStyle-HorizontalAlign="Center" ItemStyle-VerticalAlign="Middle" SortExpression="BillingAmt">
                <ItemStyle HorizontalAlign="Center" VerticalAlign="Middle" />
            </asp:BoundField>
            <asp:BoundField DataField="DpAmt" HeaderText="DP Amount" ItemStyle-HorizontalAlign="Center" ItemStyle-VerticalAlign="Middle" SortExpression="DpAmt">
                <ItemStyle HorizontalAlign="Center" VerticalAlign="Middle" />
            </asp:BoundField>
            <asp:BoundField DataField="LoanAmt" HeaderText="Loan Amount" ItemStyle-HorizontalAlign="Center" ItemStyle-VerticalAlign="Middle" SortExpression="LoanAmt">
                <ItemStyle HorizontalAlign="Center" VerticalAlign="Middle" />
            </asp:BoundField>
            <asp:BoundField DataField="InterestRate" HeaderText="Interest Rate" ItemStyle-HorizontalAlign="Center" ItemStyle-VerticalAlign="Middle" SortExpression="InterestRate">
                <ItemStyle HorizontalAlign="Center" VerticalAlign="Middle" />
            </asp:BoundField>
            <asp:TemplateField HeaderText="More" ItemStyle-HorizontalAlign="Center" ItemStyle-VerticalAlign="Middle">
                <ItemTemplate>
                    <asp:ImageButton ID="imgMore" runat="server" Height="22px" ImageUrl="~/Images/MoreDetail.png" ToolTip="More Details" Width="28px" CommandArgument='
    <%# Eval("PK_CustomerID") %>
    ' CommandName="more" />
                </ItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField HeaderText="Document" ItemStyle-HorizontalAlign="Center" ItemStyle-VerticalAlign="Middle">
                <ItemTemplate>
                    <asp:ImageButton ID="imgDetail" runat="server" Height="22px" ImageUrl="~/Images/document1.png" ToolTip="Document Details" Width="28px" CommandArgument='
    <%# Eval("PK_CustomerID") %>
    ' CommandName="document" />
                </ItemTemplate>
            </asp:TemplateField>
        </Columns>
        <EmptyDataRowStyle HorizontalAlign="Center" VerticalAlign="Middle" />
        <EmptyDataTemplate>
            <asp:Label ID="lblEmpty" runat="server" ForeColor="Red" Text="Record Does not exists.">
            </asp:Label>
        </EmptyDataTemplate>
        <FooterStyle CssClass="gridFooter" HorizontalAlign="Center" VerticalAlign="Middle" />
        <HeaderStyle BorderStyle="None" CssClass="gridHeader" />
        <PagerStyle CssClass="gridHeader" HorizontalAlign="Center" VerticalAlign="Middle" />
        <SelectedRowStyle BackColor="#A8D3FF" />
    </asp:GridView>
</div>

代码:

 divppdf.Visible = true;
 Response.ContentType = "application/pdf";
 Response.AddHeader("content-disposition", "attachment;filename=TestPage.pdf");
 Response.Cache.SetCacheability(HttpCacheability.NoCache);
 StringWriter sw = new StringWriter();
 HtmlTextWriter hw = new HtmlTextWriter(sw);
 divppdf.RenderControl(hw);
 StringReader sr = new StringReader(sw.ToString());
 Document pdfDoc = new Document(PageSize.A4, 80f, 80f, -2f, 35f);
 HTMLWorker htmlparser = new HTMLWorker(pdfDoc);
 PdfWriter writer = PdfWriter.GetInstance(pdfDoc, Response.OutputStream);
 pdfDoc.Open();
 //head.WriteSelectedRows(0, -1, page.Width / 8, page.Height - pdfDoc.TopMargin + head.TotalHeight, writer.DirectContent);
 //pdfDoc.Add(headerTbl);   
 htmlparser.Parse(sr);
 pdfDoc.Close();
 Response.Write(pdfDoc);
 Response.End();   

解释: 我的问题是我收到如下“错误”。

主要是我无法在上面的代码中获取div标签的内容。

 divppdf.RenderControl(hw);

注意:

母版页内的这个页面。

更新 这是我的错误。

“GridView”类型的控件“ContentPlaceHolder1_grdLoanInquery”必须放置在带有 runat=server 的表单标记内。

【问题讨论】:

  • 您附加的图像不清楚...请添加您遇到的错误...
  • 我附上了我的错误信息。
  • 错误说:must be placed inside a form tag with runat=server - 请确认你满足这个说法?
  • 这个解决方案webblogsforyou.com/…帮助我解决了我的问题。

标签: c# asp.net pdf gridview export


【解决方案1】:

请覆盖渲染事件,它可能会帮助你。

protected override void Render(HtmlTextWriter writer)
{
  EnsureChildControls();
  base.Render(writer);
}

【讨论】:

    【解决方案2】:

    您应该渲染 GridView,而不是渲染 div。 以下代码向您展示了如何实现这一目标。

    代码:

    Response.ContentType = "application/pdf";
    
    Response.AddHeader("content-disposition", "attachment;filename=UserDetails.pdf");
    
    Response.Cache.SetCacheability(HttpCacheability.NoCache);
    
    StringWriter sw = new StringWriter();
    
    HtmlTextWriter hw = new HtmlTextWriter(sw);
    
    grdLoanInquery.AllowPaging = false;
    
    grdLoanInquery.DataBind();
    
    grdLoanInquery.RenderControl(hw);
    
    StringReader sr = new StringReader(sw.ToString());
    
    Document pdfDoc = new Document(PageSize.A2, 7f, 7f, 7f, 0f);
    
    HTMLWorker htmlparser = new HTMLWorker(pdfDoc);
    
    PdfWriter.GetInstance(pdfDoc, Response.OutputStream);
    
    pdfDoc.Open();
    
    htmlparser.Parse(sr);
    
    pdfDoc.Close();
    
    Response.Write(pdfDoc);
    
    Response.End();
    

    【讨论】:

      【解决方案3】:
      public override void VerifyRenderingInServerForm(Control control)
      {
      
      }
      

      .aspx 文件中放置这个EnableEventValidation="false"

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-02-27
        • 1970-01-01
        • 1970-01-01
        • 2013-08-30
        • 2012-06-30
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多