用户控件出口的GridView为PDF [英] UserControl Export GridView to 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的=服务器行动=/>
< DIV ID =donotadd级=tableWrapper>
< DIV ID =TABS1>
&所述p为H.;
< DIV ID =标签-1>
< DIV 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屋!