2016-07-15 9 views
0

Ich versuche, eine Gridview-Tabelle in C# in eine PDF-Datei zu exportieren. Ich habe andere Lösungen gesucht, und es scheint, dass jeder versucht, die Tabelle zuerst aus einer SQL-Datenbank zu füllen. Dieser Schritt ist unnötig, da ich die Tabelle bereits über Active Directory und so weiter gefüllt habe. Derzeit funktioniert mein Code, aber es ist einfach schwarz und weiß und sieht eher langweilig aus.Exportieren von GridView zu PDF in C#

Hier ist meine aktuellen Code (mit iTextSharp):

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

Und mein gridview:

<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> 

Ich möchte eine Grenze für alle Tabellenzellen hinzuzufügen, jede zweite Zeile machen mit ein grauer Hintergrund. Es funktioniert großartig auf meiner Webseite, aber ich brauche es auch in meinem PDF-Dokument. Kann jemand helfen?

+0

Diese helfen könnten: http://www.pdfsharp.net/wiki/invoice-sample.ashx –

+0

Erstens Entfernen Sie 'Response.Write (pdfDoc);' vollständig, die Zeile ist falsch und kann tatsächlich beschädigte PDFs erstellen. Zweitens ist 'HTMLWorker' sehr alt und wird nicht mehr unterstützt und wurde in iText 5 durch' XMLWorker' ersetzt. Ersteres hatte nur die grundlegendste Unterstützung für CSS. Siehe [dieser lange, aber informative Beitrag zum Thema] (http://stackoverflow.com/a/25164258/231316) –

Antwort

0

Try Alternaterowcolors in gridview in aspx wie folgt zu verwenden,

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

Ich habe bereits am unteren Rand meines aspx obwohl. –