2016-07-15 3 views
0

C#에서 gridview 테이블을 PDF 파일로 내보내려고합니다. 다른 솔루션을 검색해 보니 모든 사용자가 먼저 SQL 데이터베이스에서 테이블을 채우려 고합니다. 이 단계는 필자가 이미 활성 디렉토리와 그 밖의 다른 디렉토리를 통해 테이블을 채 웠기 때문에 불필요합니다. 현재 내 코드는 작동하지만 흑백인데 오히려 둔감 해 보입니다.GridView를 PDF로 내보내기 C#

protected void ExportToPDF() 
    { 
     Response.ContentType = "application/pdf"; 
     Response.AddHeader("content-disposition", 
     "attachment;filename=GridViewExport.pdf"); 
     Response.Cache.SetCacheability(HttpCacheability.NoCache); 
     StringWriter sw = new StringWriter(); 
     HtmlTextWriter hw = new HtmlTextWriter(sw); 
     grdvList.AllowPaging = false; 
     // grdvList.DataBind(); 

     grdvList.RenderBeginTag(hw); 
     grdvList.HeaderRow.RenderControl(hw); 
     foreach (GridViewRow row in grdvList.Rows) 
     { 
      row.RenderControl(hw); 
     } 
     grdvList.FooterRow.RenderControl(hw); 
     grdvList.RenderEndTag(hw); 

     StringReader sr = new StringReader(sw.ToString()); 
     Document pdfDoc = new Document(PageSize.A4, 10f, 10f, 10f, 0f); 
     HTMLWorker htmlparser = new HTMLWorker(pdfDoc); 
     PdfWriter.GetInstance(pdfDoc, Response.OutputStream); 
     pdfDoc.Open(); 
     htmlparser.Parse(sr); 
     pdfDoc.Close(); 
     Response.Write(pdfDoc); 
     Response.End(); 
    } 

그리고 내 gridview에 : 여기

은 (iTextSharp 사용) 내 현재 코드입니다

<asp:GridView ID="grdvList" runat="server" AutoGenerateColumns="False"> 
     <Columns> 
      <asp:BoundField HeaderText="Name" datafield="Name" ReadOnly="True" > 
      <ItemStyle Width="17.5%" /> 
      </asp:BoundField> 
      <asp:BoundField HeaderText="Phone Ext" datafield="Phone Ext" ReadOnly="True" > 
      <ItemStyle Width="11.5%" /> 
      </asp:BoundField> 
      <asp:BoundField HeaderText="Mobile" datafield="Mobile" ReadOnly="True" > 
      <ItemStyle Width="16%" /> 
      </asp:BoundField> 
      <asp:BoundField HeaderText="Email" datafield="Email" ReadOnly="True" > 
      <ItemStyle Width="47.5%" /> 
      </asp:BoundField> 
      <asp:BoundField HeaderText="Department" DataField="Department" ReadOnly="True" > 
      <ItemStyle Width="17.5%" /> 
      </asp:BoundField> 
     </Columns> 

     <alternatingrowstyle backcolor="#D6D6D6" /> 

    </asp:GridView> 

나는 모든 두 번째 행과 제작, 모든 테이블 셀에 테두리를 추가 할 회색 배경. 내 웹 페이지에서 잘 작동하지만 PDF 문서에서도 작동해야합니다. 누구든지 도와 줄 수 있습니까? 다음과 같이 영문에있는 gridview에서 Alternaterowcolors를 사용하는

+0

이 도움이 될 : http://www.pdfsharp.net/wiki/invoice-sample.ashx –

+0

첫째, 'Response.Write (pdfDoc);'를 완전히 제거하면 라인이 잘못되어 실제로 PDF가 손상 될 수 있습니다. 둘째로,'HTMLWorker'는 매우 오래되었고 더 이상 지원되지 않으며 iText 5에서'XMLWorker'로 대체되었습니다. 전자는 CSS에 대한 가장 기본적인 지원 만했습니다. [주제에 관한이 길지만 유익한 게시물]을 참조하십시오. (http://stackoverflow.com/a/25164258/231316) –

답변

0

시도,

1. Alternative color for Gridview rows 
    </div> 
    <br /> 
    <asp:GridView ID="GridVwRowcolorchange" runat="server" AutoGenerateColumns="False" 
     Font-Names="Verdana" PageSize="5" Width="75%" BorderColor="#CCCCCC" BorderStyle="Solid" 
     BorderWidth="1px"> 
     <AlternatingRowStyle BackColor="#BFE4FF" /> 
     <PagerStyle BorderColor="#CCCCCC" BorderStyle="Solid" BorderWidth="1px" /> 
     <HeaderStyle Height="30px" BackColor="#6DC2FF" Font-Size="15px" BorderColor="#CCCCCC" 
      BorderStyle="Solid" BorderWidth="1px" /> 
     <RowStyle Height="20px" Font-Size="13px" BorderColor="#CCCCCC" BorderStyle="Solid" 
      BorderWidth="1px" /> 
     <Columns> 
      <asp:BoundField DataField="Emp_Name" HeaderText="Employee Name" /> 
      <asp:BoundField DataField="Emp_id" HeaderText="Employee ID" /> 
      <asp:BoundField DataField="Emp_job" HeaderText="Job title" /> 
      <asp:BoundField DataField="Emp_Dep" HeaderText="Department" /> 
     </Columns> 
    </asp:GridView> 

Click for futher reference

+0

내 aspx 맨 아래에 이미 이 있습니다. –