我正在尝试将gridview导出为C#中的excel。但是有些列的数据类似于0005467.所以当我尝试将Gridview导出到Excel时,列中的数据变为5467,因为它正在处理此列作为数字而不是字符串。有时当最后有很多0时,它会将该数字视为指数。我不希望此列更改,因为这些是ID。 在将整个gridview导出为excel之前,有没有办法在c#中更改所选列的数据类型?
我将Gridview导出到Excel的代码:
Response.Clear();
Response.AddHeader("content-disposition", "attachment;filename=" + fname + ".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(stringWrite.ToString());
Response.End();
我试过插入
Response.Write("<style> TD { mso-number-format:\@; } </style>");
在上面的代码中但没有用。
请帮忙!
答案 0 :(得分:2)
您好,如果您想更改列的数据类型, 首先,您需要记住,如果该表已有数据,则无法更改故事中列的数据类型。您可以做的是先克隆表并分配给另一个表(新表)。然后更改新表的数据类型,并将第一个表中的所有数据复制到新创建的表中。
这是一个演示,对于相同的导出和导入excel,我正在使用它。
using (OleDbConnection conn = new OleDbConnection(excelConnectionString))
{
conn.Open();
OleDbCommand cmd = new OleDbCommand(query, conn);
OleDbDataAdapter da = new OleDbDataAdapter(cmd);
//This is the initial table
DataTable dtDetails = new DataTable();
da.Fill(dtDetails);
//This is the table for whom i need to change the datatype of columns
DataTable dtCloned = dtDetails.Clone();
dtCloned.Columns["myColumn1"].DataType = System.Type.GetType("System.String");
dtCloned.Columns["myColumn2"].DataType = System.Type.GetType("System.String");
//Copy all data from first table to this new table
foreach (DataRow dr in dtDetails.Rows)
{
dtCloned.Rows.Add(dr.ItemArray);
}
GridProjectDetails.DataSource = dtCloned;
GridProjectDetails.DataBind();
//Then you can export this Grid
}
答案 1 :(得分:0)
尝试导出为csv格式而不是excel(.xls)
为此你需要改变内容类型,在第2行使用下面一行。
Response.AddHeader(“content-disposition”,“attachment; filename =”+ fname +“。csv”)