一个值得注意的小问题。
在写一个将数据绑定DataGrid并输出到Excel文档的方法的时候,碰到了一个小小的问题,就是绑定的数据都是齐全的,但是输出的时候,总是少了几列的内容。
反复检查之下,终于发现了问题:
ExportToExcel方法如下:
#region ExportToExcel:将数据绑定DataGrid并输出到文件 | Eason.L / 2011.08.09
/// <summary>
/// 将数据绑定DataGrid并输出到文件
/// </summary>
/// <param name="fileName"></param>
/// <param name="exportData"></param>
public void ExportToExcel(string fileName, List<ExcelModels> exportData)
{
if (exportData != null)
{
// 建立 DataGrid 用于绑定数据并格式化输出
System.Web.UI.WebControls.DataGrid dgExport = new System.Web.UI.WebControls.DataGrid();
// 获取当前对话内容
System.Web.HttpContext curContext = System.Web.HttpContext.Current;
// 创建 IO String 用于导出并返回excel文件
System.IO.StringWriter strWriter = new System.IO.StringWriter();
System.Web.UI.HtmlTextWriter htmlWriter = new System.Web.UI.HtmlTextWriter(strWriter);
// 需要重新定义一个无分页的DataGrid
dgExport.DataSource = exportData;
dgExport.AllowPaging = false;
dgExport.DataBind();
// 返回客户端
dgExport.RenderControl(htmlWriter);
System.IO.FileInfo file = new System.IO.FileInfo(fileName);
file.Delete();
// 设置编码和附件格式
curContext.Response.ContentType = "application/vnd.ms-excel";
curContext.Response.ContentEncoding = System.Text.Encoding.UTF8;
curContext.Response.Charset = "UTF-8";
// 输出到文件流
curContext.Response.Write(strWriter.ToString());
curContext.Response.AppendHeader("Content-Disposition", "attachment; filename=\"" + System.Web.HttpUtility.UrlEncode(Path.GetFileName(fileName), System.Text.Encoding.GetEncoding("UTF-8")) + "\"");
curContext.Response.End();
}
}
#endregion
其中 ExcelModels 的定义如下:
public class _200Models
{
/// <summary>
/// 主叫号码
/// </summary>
public string FromNum { get; set; }
/// <summary>
/// 被叫号码
/// </summary>
public string ToNum { get; set; }
/// <summary>
/// 开始时间
/// </summary>
public DateTime? StartTime { get; set; }
/// <summary>
/// 结束时间
/// </summary>
public DateTime? EndTime { get; set; }
/// <summary>
/// 时长
/// </summary>
public int? Timings { get; set; }
/// <summary>
/// 计费
/// </summary>
public int? Fee { get; set; }
/// <summary>
/// 计费标识
/// </summary>
public int? FeeMark { get; set; }
}
导出的 Excel 文档中,只有非空字段属性 FromNum 和 ToNum 的内容,其他可空属性全部没有了~
只有将所有可空属性类型的?去掉,变成非空类型之后,才完整地输出了所有的数据。