C# 如何将gridview转换为excel?
我试图将gridview转换为excelC# 如何将gridview转换为excel?,c#,asp.net,excel,gridview,content-type,C#,Asp.net,Excel,Gridview,Content Type,我试图将gridview转换为excel.xls,但它会引发错误,当我单击“确定”时,它会转换,但整个页面显示在excel中。 我尝试了所有可能的内容类型,我有excel 2010 错误: 您试图转换的文件的格式与文件扩展名指定的格式不同 代码: protectedvoid btnTransactionDetails\u单击(对象发送方,事件参数e) { 尝试 { LabelResult.Text=“”; //GetReport(); int BusID=Convert.ToInt32(drop
.xls
,但它会引发错误,当我单击“确定”时,它会转换,但整个页面显示在excel中。
我尝试了所有可能的内容类型,我有excel 2010
错误:
您试图转换的文件的格式与文件扩展名指定的格式不同
代码:
protectedvoid btnTransactionDetails\u单击(对象发送方,事件参数e)
{
尝试
{
LabelResult.Text=“”;
//GetReport();
int BusID=Convert.ToInt32(dropdownlistbus.SelectedValue);
int AccountID=Convert.ToInt32(DropDownList1.SelectedValue);
DateTime FromDate=Convert.ToDateTime(FromDateTextBox.Text);
DateTime ToDate=Convert.ToDateTime(ToDateTextBox.Text);
DataTable dt=新的DataTable();
dt=活动.GetLedger(AccountID、BusID、FromDate、ToDate);
GridViewLedger.DataSource=dt;
GridViewLedger.DataBind();
视图状态[“分类账”]=dt;
}
捕获(例外情况除外)
{
LabelResult.Text=例如消息;
}
}
受保护的void btnExportToExcel\u单击(对象发送方,事件参数e)
{
尝试
{
Response.Clear();
Response.AddHeader(“内容处置”、“附件;文件名=账本报告”+FromDateTextBox.Text+”到“+ToDateTextBox.Text+”.xls”);
Response.ContentType=“application/vnd.xlsx”;
System.IO.StringWriter stringWrite=新的System.IO.StringWriter();
System.Web.UI.HtmlTextWriter htmlWrite=新的HtmlTextWriter(stringWrite);
编写(“报告日期:+FromDateTextBox.Text+”到“+FromDateTextBox.Text+”);
GridViewLedger.AllowPaging=false;
GridViewLedger.AllowSorting=false;
//出席人数();
GridViewLedger.DataSource=(数据集)ViewState[“分类账”];
GridViewLedger.DataBind();
对于(int i=0;i更改此行
(数据集)视图状态[“分类账”];到(数据表)视图状态[“分类账”];
您正在尝试将DataTable类型转换为DataSet
您将得到以下异常
无法将“System.Data.DataTable”类型的对象强制转换为“System.Data.DataSet”类型。
因为ViewState[“分类账”]包含数据表(您已将数据表分配给它)
我已经创建了一个与您的代码完全相同的示例项目。它对我来说工作正常,请检查
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
DataTable table = new DataTable();
table.Columns.Add("Dosage", typeof(int));
table.Columns.Add("Drug", typeof(string));
table.Columns.Add("Patient", typeof(string));
table.Columns.Add("Date", typeof(DateTime));
// Here we add five DataRows.
table.Rows.Add(25, "Indocin", "David", DateTime.Now);
table.Rows.Add(50, "Enebrel", "Sam", DateTime.Now);
table.Rows.Add(10, "Hydralazine", "Christoff", DateTime.Now);
table.Rows.Add(21, "Combivent", "Janet", DateTime.Now);
table.Rows.Add(100, "Dilantin", "Melanie", DateTime.Now);
GridView1.DataSource = table;
GridView1.DataBind();
ViewState["Ledger"] = table;
}
}
protected void Button1_Click(object sender, EventArgs e)
{
Response.Clear();
Response.AddHeader("content-disposition", "attachment;filename=LedgerReport.xls");
Response.ContentType = "application/vnd.xls";
System.IO.StringWriter stringWrite = new System.IO.StringWriter();
System.Web.UI.HtmlTextWriter htmlWrite = new HtmlTextWriter(stringWrite);
htmlWrite.Write("<table><tr><td colspan='4'><center>Report Date </center></td></tr></table>");
GridView1.AllowPaging = false;
GridView1.AllowSorting = false;
GridView1.DataSource = (DataTable)ViewState["Ledger"];
GridView1.DataBind();
for (int i = 0; i <= GridView1.Columns.Count - 1; i++)
{
GridView1.HeaderRow.Cells[i].Style.Add("background-color", "#2FA4E7");
GridView1.HeaderRow.Cells[i].Style.Add("color", "#FFFFFF");
}
GridView1.RenderControl(htmlWrite);
string style = @"<style> .textmode { mso-number-format:\@; } </style>";
Response.Write(style);
Response.Write(stringWrite.ToString());
Response.End();
}
public override void VerifyRenderingInServerForm(Control control)
{
/* Confirms that an HtmlForm control is rendered for the specified ASP.NET
server control at run time. */
}
受保护的无效页面加载(对象发送方,事件参数e)
{
如果(!IsPostBack)
{
DataTable=新的DataTable();
表.列.添加(“剂量”,类型(int));
表.列.添加(“药物”,类型(字符串));
表.列.添加(“患者”,类型(字符串));
表.列.添加(“日期”,类型(日期时间));
//这里我们添加五个数据行。
表.Rows.Add(25,“Indocin”,“David”,DateTime.Now);
添加(50,“Enebrel”,“Sam”,DateTime.Now);
表.Rows.Add(10,“Hydrazine”,“Christoff”,DateTime.Now);
添加(21,“Combivent”,“Janet”,DateTime.Now);
表.行.添加(100,“迪兰丁”,“梅勒妮”,日期时间.现在);
GridView1.DataSource=表格;
GridView1.DataBind();
ViewState[“分类账”]=表格;
}
}
受保护的无效按钮1\u单击(对象发送者,事件参数e)
{
Response.Clear();
AddHeader(“内容处置”、“附件;文件名=LedgerReport.xls”);
Response.ContentType=“application/vnd.xls”;
System.IO.StringWriter stringWrite=新的System.IO.StringWriter();
System.Web.UI.HtmlTextWriter htmlWrite=新的HtmlTextWriter(stringWrite);
htmlWrite.Write(“报告日期”);
GridView1.AllowPaging=false;
GridView1.AllowSorting=false;
GridView1.DataSource=(DataTable)ViewState[“分类账”];
GridView1.DataBind();
对于(int i=0;我从数据集绑定gridview,然后在google数据集中搜索到Excel。选中此链接将数据表导出到Excel您可以尝试使用保存在ViewState[“Ledger”]=dt中的数据表;(因为您已经将数据表保存在ViewState中)请仔细检查一下,使用.xlsx如何?因为您使用的是excel 2010,所以您正在保存一个扩展名为xls的html文件。它不是一个真正的xls文件,基本上是一个二进制文件。您需要一个excel库来保存真正的excel文件。将文件扩展名更改为如下(.xls到.xlsx)Response.AddHeader(“内容处置”,“附件;文件名=账本报告”+从DateTextBox.Text+“到“+ToDateTextBox.Text+”.xlsx”)
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
DataTable table = new DataTable();
table.Columns.Add("Dosage", typeof(int));
table.Columns.Add("Drug", typeof(string));
table.Columns.Add("Patient", typeof(string));
table.Columns.Add("Date", typeof(DateTime));
// Here we add five DataRows.
table.Rows.Add(25, "Indocin", "David", DateTime.Now);
table.Rows.Add(50, "Enebrel", "Sam", DateTime.Now);
table.Rows.Add(10, "Hydralazine", "Christoff", DateTime.Now);
table.Rows.Add(21, "Combivent", "Janet", DateTime.Now);
table.Rows.Add(100, "Dilantin", "Melanie", DateTime.Now);
GridView1.DataSource = table;
GridView1.DataBind();
ViewState["Ledger"] = table;
}
}
protected void Button1_Click(object sender, EventArgs e)
{
Response.Clear();
Response.AddHeader("content-disposition", "attachment;filename=LedgerReport.xls");
Response.ContentType = "application/vnd.xls";
System.IO.StringWriter stringWrite = new System.IO.StringWriter();
System.Web.UI.HtmlTextWriter htmlWrite = new HtmlTextWriter(stringWrite);
htmlWrite.Write("<table><tr><td colspan='4'><center>Report Date </center></td></tr></table>");
GridView1.AllowPaging = false;
GridView1.AllowSorting = false;
GridView1.DataSource = (DataTable)ViewState["Ledger"];
GridView1.DataBind();
for (int i = 0; i <= GridView1.Columns.Count - 1; i++)
{
GridView1.HeaderRow.Cells[i].Style.Add("background-color", "#2FA4E7");
GridView1.HeaderRow.Cells[i].Style.Add("color", "#FFFFFF");
}
GridView1.RenderControl(htmlWrite);
string style = @"<style> .textmode { mso-number-format:\@; } </style>";
Response.Write(style);
Response.Write(stringWrite.ToString());
Response.End();
}
public override void VerifyRenderingInServerForm(Control control)
{
/* Confirms that an HtmlForm control is rendered for the specified ASP.NET
server control at run time. */
}