如何用C#语言在asp.net中将网格视图数据转换为excel表
本文关键字:数据 视图 网格 转换 excel 何用 语言 net asp | 更新日期: 2023-09-27 18:00:56
我想将GridView数据转换为Excel工作表。
我已经写了下面的代码,但它给出了错误:
protected void Button1_Click(object sender, EventArgs e)
{
Response.Clear();
Response.AddHeader("content-disposition", "attachment;filename=Avukat.xls");
Response.Charset = "";
Response.ContentType = "application/vnd.xls";
System.IO.StringWriter stringWrite = new System.IO.StringWriter();
System.Web.UI.HtmlTextWriter htmlWrite = new HtmlTextWriter(stringWrite);
GridView1.RenderControl(htmlWrite);
Response.Write("<meta http-equiv='"Content-Type'" content='"text/html; charset=utf-8'" />");
Response.Write(stringWrite.ToString());
Response.End();
}
错误:
类型为"GridView"的控件"ctl00_ContentPlaceHolder1_GridView1"必须放置在runat=server的表单标记内。
我认为你的网格视图包含一个linkbutton/Imagebutton or another type of control
,这就是为什么当你试图将网格视图导出到Excel时会出现异常。
在使用控件之前,您需要在Page代码后面或BasePage代码后面添加以下行。
public override void VerifyRenderingInServerForm(Control control)
{
}
您可以使用此代码,因为此代码经过测试并运行良好:
System.IO.StringWriter sw = new System.IO.StringWriter();
HtmlTextWriter htw = new HtmlTextWriter(sw);
Response.AddHeader("content-disposition", "attachment; filename=Avukat.xls");
Response.ClearContent();
Response.AddHeader("content-disposition", attachment);
GridView1.RenderControl(htw);
Response.Write(sw.ToString());
Response.Flush();
Response.End();
您错过了以下部分:
HtmlForm _HtmlForm= new HtmlForm();
GridView1.Parent.Controls.Add(_HtmlForm);
_HtmlForm.Attributes["runat"] = "server";
_HtmlForm.Controls.Add(GridView1);
_HtmlForm.RenderControl(htmlWrite);
我的意思是你应该使用这行代码:
_HtmlForm.RenderControl(htmlWrite);
代替:
GridView1.RenderControl(htmlWrite);
但我认为最好使用这个免费的开源组件,它可以从不同的excel和word格式导入/导出:http://npoi.codeplex.com/
您只需要复制以下代码。
public override void VerifyRenderingInServerForm(Control control)
{
// Confirms that an HtmlForm control is rendered for the
specified ASP.NET server control at run time.
}
System.Web.UI.HtmlTextWriter htmlWrite = new HtmlTextWriter(stringWrite);
this.gvTask.RenderBeginTag(htmlWrite);
this.gvTask.HeaderRow.RenderControl(htmlWrite);
foreach (GridViewRow row in this.gvTask.Rows)
{
row.RenderControl(htmlWrite);
}
this.gvTask.FooterRow.RenderControl(htmlWrite);
this.gvTask.RenderEndTag(htmlWrite);
//**how gridview data download in excel in asp.net**
protected void btnDownload_Click(object sender, EventArgs e)
{
CommonFunction objComm = new CommonFunction();
Hashtable objHash = new Hashtable();
//Hashtable htParam = new Hashtable();
objHash.Clear();
string str = ddlMonthlyYrs.SelectedItem.Text.ToString();
if (str == "Select")
{
objHash.Add("@Cmonth", "");
}
else
{
objHash.Add("@Cmonth", str.Substring(0, 6));
}
if (ddlPaymentTerm.SelectedItem.Text == "Select")
{
objHash.Add("@PaymentTerm", "");
}
else
{
objHash.Add("@PaymentTerm", ddlPaymentTerm.SelectedValue.ToString());
}
if (ddlPayMode.SelectedItem.Text == "Select")
{
objHash.Add("@PaymentMode", "");
}
else
{
objHash.Add("@PaymentMode", ddlPayMode.SelectedValue);
}
objHash.Add("@PolicyNo", txtPolicyNo.Text);
objHash.Add("@AgentCode", txtAgnCode.Text);
objHash.Add("@AgentName", txtAgnName.Text);
DataSet objDS = objComm.GetDataSetForPrcDBConn("Prc_GetIncBasedataRp", objHash, "Commssion");
BasicComm.CommonFunction objCom = new BasicComm.CommonFunction();
Response.Clear();
//Response.Charset=”";
Response.ContentType = "application/vnd.ms-excel";
System.IO.StringWriter stringWrite = new System.IO.StringWriter();
System.Web.UI.HtmlTextWriter htmlWrite = new System.Web.UI.HtmlTextWriter(stringWrite);
System.Web.UI.WebControls.DataGrid dg = new System.Web.UI.WebControls.DataGrid();
dg.DataSource = objDS.Tables[0];
dg.DataBind();
dg.RenderControl(htmlWrite);
Response.Write(stringWrite.ToString());
Response.End();
}