我有一个UserControl,我正在尝试将GridView表导出为PDF。我可以做一个CSV文件,但是尝试做PDF时出现错误。(我正在使用iTextSharp库)这是我得到的错误:
“必须将类型为'GridView'的控件'DoNotAddList_1_GridView1'放置在带有runat = server的表单标记中。”
我的html中有一个表单标签,我尝试将其添加到ascx文件中,但没有任何效果。我发现很多人都遇到此错误,大多数人建议将其添加到代码中的ascx.cs文件中:
public override void VerifyRenderingInServerForm(Control control) { }
但这给了我这个错误“找不到合适的方法来覆盖...”
我不知道该怎么办。我还没有找到解决方案。请帮忙!!
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();
}
}
这是我在aspx文件中的内容:
<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>
这是我找到的解决方案:
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();
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句