2014-01-06 2 views
-2

Я хочу экспортировать gridview в файл pdf.Экспорт gridview в pdf-файл в asp.net

Исходный код

<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(); 

Объяснение: Моя проблема заключается в том, что я получаю 'ошибка', как показано ниже. image of error

В основном я не могу получить содержимое div тега в приведенном выше коде.

divppdf.RenderControl(hw); 

Примечание:

Эта страница внутри главной страницы.

update Это моя ошибка.

Элемент управления «ContentPlaceHolder1_grdLoanInquery» типа «GridView» должен быть помещен в тег формы с помощью runat = server.

+0

Ваше прикрепленное изображение не ясное ... plz добавьте ошибку, которую вы получаете ... –

+0

Я приложил свою ошибку. –

+0

Ошибка: «должно быть помещено внутри тега формы с помощью runat = server' - Пожалуйста, подтвердите, что вы удовлетворяете этому утверждению? – Stuart

ответ

0

Пожалуйста, переопределите событие Render, это может вам помочь.

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

Вместо рендеринга div вы должны отображать GridView. Следующий код показывает вам, как вы можете достичь этой цели.

Код:

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(); 
-1
public override void VerifyRenderingInServerForm(Control control) 
{ 

} 

И в .aspx Файл место это EnableEventValidation="false".

Смежные вопросы