用户控件出口的GridView为PDF [英] UserControl Export GridView to PDF

查看:104
本文介绍了用户控件出口的GridView为PDF的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个的用户控件的,我想我的GridView表导​​出为PDF。我可以做一个CSV文件就好了,但试图做一个PDF时,我得到的错误。 (我用iTextSharp的库)这是我得到的错误:

控制型的GridView的DoNotAddList_1_GridView1'必须放在与RUNAT =服务器的表单标签内。

我有一个表格标记在我的HTML,我试图在ASCX文件中添加它但没有任何工程。我发现很多人得到这个错误,大多数人都建议增加这code到ascx.cs文件:

 公共覆盖无效VerifyRenderingInServerForm(控制控制){}

但是,这给了我这个错误的没有合适的方法来否定...

我不知道该怎么办。我一直没能找到解决的办法。请帮忙!!

 使用系统;
使用System.Data这;
使用System.Configuration;
System.Collections中使用;
使用的System.Web;
使用System.Web.Security;
使用System.Web.UI程序;
使用System.Web.UI.WebControls;
使用System.Web.UI.WebControls.WebParts;
使用System.Web.UI.HtmlControls;
使用System.IO;
使用iTextSharp.text;
使用iTextSharp.text.pdf;
使用iTextSharp.text.html;
使用iTextSharp.text.html.simpleparser;公共部分类UserControls_DoNotAddListControl:System.Web.UI.UserControl
{
保护无效PDF_Click(对象发件人,EventArgs的发送)
{
    Response.ContentType =应用程序/ PDF
    Response.AddHeader(内容处置,
     附件;文件名= GridViewExport.pdf);
    Response.Cache.SetCacheability(HttpCacheability.NoCache);
    StringWriter的SW =新的StringWriter();
    HtmlTextWriter的HW =新的HtmlTextWriter(SW);
    GridView1.AllowPaging = FALSE;
    GridView1.DataBind();
    GridView1.RenderControl(HW);
    StringReader SR =新StringReader(sw.ToString());
    文档pdfDoc =新的文档(PageSize.A4,10F,10F,10F,0F);
    HTMLWorker的HTMLParser =新HTMLWorker(pdfDoc);
    PdfWriter.GetInstance(pdfDoc,Response.OutputStream);
    pdfDoc.Open();
    htmlparser.Parse(SR);
    pdfDoc.Close();
    的Response.Write(pdfDoc);
    到Response.End();
}
保护无效CSV_Click(对象发件人,EventArgs的发送)
{
     Response.ClearContent();
    Response.AddHeader(内容处置的String.Format(附件;文件名= {0},BloombergDaily.csv));
    Response.ContentType =应用程序/文本;
    GridView1.AllowPaging = FALSE;
    GridView1.DataBind();
    StringBuilder的strbldr =新的StringBuilder();
    的for(int i = 0; I< GridView1.Columns.Count;我++)
    {
        strbldr.Append(GridView1.Columns [I] .HeaderText +',');
    }
    strbldr.Append(\\ n);
    对于(INT J = 0; J< GridView1.Rows.Count; J ++)
    {
        对于(INT K = 0; K< GridView1.Columns.Count; k ++)
        {
            strbldr.Append(GridView1.Rows [j]的.Cells [K]。文本+',');
        }
        strbldr.Append(\\ n);
    }
    的Response.Write(strbldr.ToString());
    到Response.End();
}
}

下面就是我在aspx文件:

 <表ID =form1的=服务器行动=/>
        < D​​IV ID =donotadd级=tableWrapper>
            < D​​IV ID =TABS1>
                &所述p为H.;
                    < D​​IV ID =标签-1>
                        < D​​IV ID =DoNotAddListMacro级=dataTable的table_Center>
                        <一把umbraco:宏ID =Macro1的别名=DoNotAddListControl=服务器>< /一把umbraco:宏>
                        < / DIV>
                    < / DIV>
                &所述; / P>
            < / DIV>
        < / DIV>
    < /表及GT;


解决方案

下面是我找到了解决办法:

 保护无效BtnPDF_Click(对象发件人,EventArgs的发送)
    {
        GridView控件GV =新的GridView();
        gv.DataSource = SqlDataSource1;
        gv.DataBind();
        StringWriter的SW =新的StringWriter();
        HtmlTextWriter的HTW =新的HtmlTextWriter(SW);        gv.RenderControl(HTW);        VAR纪念品=新的MemoryStream();        文档的文档=新的文件(PageSize.LETTER,50,50,50,50);
        PdfWriter.GetInstance(文件,MEM);        document.Open();        iTextSharp.text.html.simpleparser.HTMLWorker HW =新iTextSharp.text.html.simpleparser.HTMLWorker(文件);
        hw.Parse(新StringReader(sw.ToString()));
        document.Close();        Response.ClearContent();
        Response.ClearHeaders();
        Response.ContentType =应用程序/ PDF
        Response.AddHeader(内容处置,附件;文件名=+ DateTime.Now);        Response.BinaryWrite(mem.ToArray());
        到Response.End();
        Response.Flush();
        Response.Clear();
    }

I have a UserControl and I'm trying to export my GridView table to a PDF. I am able to do a CSV file just fine, but I get errors when trying to do a PDF. (I am using iTextSharp Library) This is the error I'm getting:

"Control 'DoNotAddList_1_GridView1' of type 'GridView' must be placed inside a form tag with runat=server."

I have a form tag in my html, and I tried adding it in the ascx file but nothing works. I've found many people getting this error and most everyone suggested adding this to code to the ascx.cs file:

public override void VerifyRenderingInServerForm(Control control) {     }

But that gives me this error "no suitable method found to override..."

I don't know what to do. I haven't been able to find a solution. Please Help!!

using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.IO;
using iTextSharp.text;
using iTextSharp.text.pdf;
using iTextSharp.text.html;
using iTextSharp.text.html.simpleparser;

public partial class UserControls_DoNotAddListControl : System.Web.UI.UserControl
{
protected void PDF_Click(object sender, EventArgs e)
{   
    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);
    GridView1.AllowPaging = false;
    GridView1.DataBind();
    GridView1.RenderControl(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();
}
protected void CSV_Click(object sender, EventArgs e)
{
     Response.ClearContent();
    Response.AddHeader("content-disposition", string.Format("attachment; filename={0}", "BloombergDaily.csv"));
    Response.ContentType = "application/text";
    GridView1.AllowPaging = false;
    GridView1.DataBind();
    StringBuilder strbldr = new StringBuilder();
    for (int i = 0; i < GridView1.Columns.Count; i++)
    {
        strbldr.Append(GridView1.Columns[i].HeaderText + ',');
    }
    strbldr.Append("\n");
    for (int j = 0; j < GridView1.Rows.Count; j++)
    {
        for (int k = 0; k < GridView1.Columns.Count; k++)
        {
            strbldr.Append(GridView1.Rows[j].Cells[k].Text + ',');
        }
        strbldr.Append("\n");
    }
    Response.Write(strbldr.ToString());
    Response.End();
}
}

Here's what I have in the aspx file:

<form id="form1" runat="server" action="/">          
        <div id="donotadd" class="tableWrapper">
            <div id="tabs1">
                <p>
                    <div id="tabs-1" >                           
                        <div id="DoNotAddListMacro" class="dataTable table_Center">
                        <umbraco:Macro ID="Macro1" Alias="DoNotAddListControl" runat="server"></umbraco:Macro>
                        </div>                                                                          
                    </div>   
                </p>
            </div>    
        </div>            
    </form> 

解决方案

Here's the solution I found:

protected void BtnPDF_Click(object sender, EventArgs e)
    {
        GridView gv = new GridView();
        gv.DataSource = SqlDataSource1;
        gv.DataBind();
        StringWriter sw = new StringWriter();
        HtmlTextWriter htw = new HtmlTextWriter(sw);

        gv.RenderControl(htw);

        var mem = new MemoryStream();

        Document document = new Document(PageSize.LETTER, 50, 50, 50, 50);
        PdfWriter.GetInstance(document,mem);

        document.Open();

        iTextSharp.text.html.simpleparser.HTMLWorker hw = new iTextSharp.text.html.simpleparser.HTMLWorker(document);
        hw.Parse(new StringReader(sw.ToString()));
        document.Close();

        Response.ClearContent();
        Response.ClearHeaders();
        Response.ContentType = "application/pdf";
        Response.AddHeader("Content-Disposition", "attachment; filename=" + DateTime.Now);

        Response.BinaryWrite(mem.ToArray());
        Response.End();
        Response.Flush();
        Response.Clear();
    }

这篇关于用户控件出口的GridView为PDF的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆