Some thoughts about exporting GridView to Excel
2006-07-26 22:21
686 查看
Here is an article that helped me once: http://www.codeproject.com/aspnet/DAtaGridExportToExcel.asp. Everything is ok with ASP.NET 1.1, but when I tried to run the same code in a project written in C# 2.0 I got an exception, saying: "Control 'GridView1' of type 'GridView' must be placed inside a form tag with runat=server" (of course I used GridView control instead of DataGrid control). I don't know what was the cause of the error, but I found a workaround: instead of just rendering the whole GridView consider rendering of each GridView row separately. Here is the code illustrating what I'm trying to explain:
Response.Clear();
Response.AddHeader("content-disposition", "attachment;filename=Report.xls");
Response.ContentType = "application/excel";
System.IO.StringWriter buffer = new System.IO.StringWriter();
System.Web.UI.HtmlTextWriter writer = new HtmlTextWriter(buffer);
writer.WriteLine("<table cellspacing=/"0/", rules=/"all/", border=/"1/">");
GridView1.HeaderRow.RenderControl(writer);
foreach (GridViewRow row in GridView1.Rows)
row.RenderControl(writer);
writer.WriteLine("</table>");
Response.Write(buffer.ToString());
Response.End();
Here is the code I prefer to use now with GridView paging enabled:
Response.Clear();
Response.AddHeader("content-disposition", "attachment;filename=Report.xls");
Response.ContentType = "application/excel";
System.Text.StringBuilder buffer = new System.Text.StringBuilder();
XmlWriterSettings settings = new XmlWriterSettings();
settings.OmitXmlDeclaration = true;
using (XmlWriter writer = XmlTextWriter.Create(buffer, settings))
{
writer.WriteStartElement("table");
writer.WriteAttributeString("cellspacing", "0");
writer.WriteAttributeString("rules", "all");
writer.WriteAttributeString("border", "1");
writer.WriteStartElement("tr");
writer.WriteAttributeString("style", "font-weight:bold");
foreach (TableCell cell in this.GridView1.HeaderRow.Cells)
{
writer.WriteStartElement("td");
writer.WriteValue(cell.Text);
writer.WriteEndElement();
}
writer.WriteEndElement();
using (SqlDataReader reader = SqlHelper.ExecuteReader(
ConfigurationManager.ConnectionStrings[0].ConnectionString, CommandType.Text, "SELECT * FROM TEMP"))
{
while (reader.Read())
{
writer.WriteStartElement("tr");
for (int i = 0; i < reader.FieldCount; i++)
{
writer.WriteStartElement("td");
object data = reader[i];
if (data is DBNull)
writer.WriteValue(string.Empty);
else if (data is DateTime)
writer.WriteValue(string.Format(CultureInfo.CurrentCulture, "{0:d}", data));
else
writer.WriteValue(data);
writer.WriteEndElement();
}
writer.WriteEndElement();
}
}
writer.WriteEndElement();
writer.Flush();
}
Response.Write(buffer.ToString());
Response.End();
相关文章推荐
- Some Raw Thoughts about apply “Stigmergy” Model to Search System
- Some thoughts about how to learn english well
- Some thoughts about NS2
- GridViewToExcel
- Exporting DataGrid to Excel, Word and Text Files
- some materials about how to write technical articles
- Code snippet of the day : Exporting DataGrid Data to Excel...
- [译]ASP.Net 2.0: Export GridView to Excel
- [译]ASP.Net 2.0: Export GridView to Excel
- 什么是极坐标? —— 一点微小的想法 What is Polar Coordinate ? - Some Naive Thoughts about It
- Export large data from GridView to Excel file using C#
- ASP.Net 2.0: Export GridView to Excel
- sOmE clues aBoUt how tO get oNe fUlLsEt of mAmE
- ASP.Net 2.0: Export GridView to Excel
- Export GridView to Excel
- gridview汇出EXCEL (ExportGridViewToExcel(dt, HttpContext.Current.Response);)
- gridview内容To EXCEL的要点
- Some thinking about scala concurrency compare to java
- Multiple GridView that contain multiple header row export data to excel(csharp)
- ASP.Net 2.0: Export GridView to Excel - Part II