将数据绑定DataGrid并输出Excel文档的数据模型问题

在尝试将DataGrid中的数据导出到Excel时,遇到一个问题:输出的Excel缺少可空字段内容。通过检查代码发现,只有非空字段如FromNum和ToNum被正确导出。解决方法是将所有可空类型字段修改为非空类型,从而确保所有数据完整导出。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一个值得注意的小问题。

在写一个将数据绑定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 的内容,其他可空属性全部没有了~
只有将所有可空属性类型的?去掉,变成非空类型之后,才完整地输出了所有的数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值