如何将gridview转换为excel
本文关键字:excel 转换 gridview | 更新日期: 2024-09-25 18:08:25
我正试图将网格视图转换为excel .xls
,但它引发了错误,当我单击"确定"时,它进行了转换,但整个页面都显示在excel中。我尝试了所有可能的内容类型,我有Excel2010。
错误:
您尝试转换的文件的格式与文件扩展名指定的格式不同
代码:
protected void btnTransactionDetails_Click(object sender, EventArgs e)
{
try
{
LabelResult.Text = "";
//GetReport();
int BusID= Convert.ToInt32(DropDownListBuses.SelectedValue);
int AccountID= Convert.ToInt32(DropDownList1.SelectedValue);
DateTime FromDate = Convert.ToDateTime( FromDateTextBox.Text);
DateTime ToDate = Convert.ToDateTime( ToDateTextBox.Text);
DataTable dt= new DataTable();
dt= Activities.GetLedger(AccountID, BusID, FromDate, ToDate);
GridViewLedger.DataSource= dt;
GridViewLedger.DataBind();
ViewState["Ledger"]= dt;
}
catch (Exception ex)
{
LabelResult.Text = ex.Message;
}
}
protected void btnExportToExcel_Click(object sender, EventArgs e)
{
try
{
Response.Clear();
Response.AddHeader("content-disposition", "attachment;filename=LedgerReport_" + FromDateTextBox.Text + " To " + ToDateTextBox.Text + ".xls");
Response.ContentType = "application/vnd.xlsx";
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 : " + FromDateTextBox.Text + " To " + FromDateTextBox.Text + "</center></td></tr></table>");
GridViewLedger.AllowPaging = false;
GridViewLedger.AllowSorting = false;
// showAttendance();
GridViewLedger.DataSource = (DataSet)ViewState["Ledger"];
GridViewLedger.DataBind();
for (int i = 0; i <= GridViewLedger.Columns.Count - 1; i++)
{
GridViewLedger.HeaderRow.Cells[i].Style.Add("background-color", "#2FA4E7");
GridViewLedger.HeaderRow.Cells[i].Style.Add("color", "#FFFFFF");
}
for (int i = 0; i < GridViewLedger.Rows.Count; i++)
{
GridViewRow row = GridViewLedger.Rows[i];
row.Cells[3].Style.Add("background-color", "#73a839");
row.Cells[3].Style.Add("color", "#FFFFFF");
row.Cells[4].Style.Add("background-color", "#DA272D");
row.Cells[4].Style.Add("color", "#FFFFFF");
}
GridViewLedger.RenderControl(htmlWrite);
string style = @"<style> .textmode { mso-number-format:'@; } </style>";
Response.Write(style);
Response.Write(stringWrite.ToString());
Response.End();
}
catch (Exception x)
{
// ResultLabel.ResultLabelAttributes(x.Message, ProjectUserControls.Enums.ResultLabel_Color.Red);
}
}
更改此行
(数据集)ViewState["Ledger"];To(DataTable)ViewState["Ledger"]
您正在尝试将DataTable类型转换为DataSet您将得到以下异常
无法将"System.Data.DataTable"类型的对象强制转换为"System.DataDataSet"类型。
因为ViewState["Ledger"]包含数据表(您已将数据表分配给它)
我创建了一个示例项目,它与您的代码完全相同。它对我来说很好,请检查
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. */
}