c# – .NET导出到excel – 未显示子行

在我的asp.net应用程序中,我让用户通过单击按钮从视图中导出一些数据.下面的代码导出一个excel文件.问题是我无法弄清楚如何显示对象的模型列表.

var grid = new GridView();
        grid.DataSource = exportModels;
        grid.DataBind();

        Response.ClearContent();
        response.addheader("content-disposition","attachment; filename=Exported_Orders.xls");
        Response.ContentType = "application/excel";
        StringWriter sw = new StringWriter();
        HtmlTextWriter htw = new HtmlTextWriter(sw);

        grid.RenderControl(htw);

        Response.Write(sw.ToString());

        Response.End();

数据源模型是这样的:

public class ExportOrdersviewmodel
    {
        public int Id { get; set; }
        public string CustomerFirstName { get; set; }
        public string CustomerLastName { get; set; }
        public string CustomerEmail { get; set; }
        public string CustomerMobile { get; set; }
        public string ShippingStreet { get; set; }
        public string ShippingCity { get; set; }
        public string ShippingCountry { get; set; }
        public string ShippingPostalCode { get; set; }
        public string ShippingTo { get; set; }
        public bool IsShipped { get; set; }
        public ICollection<ExportOrdersItemviewmodel> Items { get; set; }

    }

    public class ExportOrdersItemviewmodel
    {
        public string TicketName { get; set; }
        public string EventName { get; set; }
        public int Quantity { get; set; }
        public string CurrencyId { get; set; }
        public string PaymentCurrencyId { get; set; }
        public string UnitPrice { get; set; }
        public string PaymentUnitPrice { get; set; }
    }

ExportOrderviewmodel包含ExportOrderItemviewmodel的列表,并且在导出文件时,该文件中缺少每个订单的项行.我真的需要一些关于如何在导出时添加这些字段的帮助.

以下是导出文件标题

enter image description here

这是网格对象在创建excel文件之前包含的内容

enter image description here

解决方法

正如@Crowcoder建议的那样,我使用了CLoseXML库,最终成功找到了解决问题的方法.

这是生成我想要的Excel的代码

using (var workBook = new XLWorkbook())
            {
                var workSheet = workBook.Worksheets.Add("Guests");

                var guestTable = new DataTable();
                guestTable.Columns.Add(Resources.Strings.FirstName,typeof(string));
                guestTable.Columns.Add(Resources.Strings.LastName,typeof(string));
                guestTable.Columns.Add(Resources.Strings.TicketName,typeof(string));
                guestTable.Columns.Add(Resources.Strings.TicketType,typeof(string));
                guestTable.Columns.Add(Resources.Strings.ShortCode,typeof(string));
                guestTable.Columns.Add(Resources.Strings.HasVisitorEnteredEvent,typeof(string));
                foreach (var entry in guestList)
                {
                    guestTable.Rows.Add(
                        entry.FirstName,entry.LastName,entry.TicketName,entry.TicketType,entry.ShortCode,entry.HasEntered);
                }
                workSheet.Cell(1,1).InsertTable(guestTable);
                workSheet.Tables.ForEach(t => t.ShowAutoFilter = false);
                workSheet.Style.Alignment.Vertical = XLAlignmentVerticalValues.Center;
                workSheet.Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center;
                workSheet.Tables.ForEach(t => t.Theme = XLTableTheme.TableStyleLight13);
                workSheet.Columns().AdjustToContents();
                workBook.SaveAs(outputStream);
            }

相关文章

目录简介使用JS互操作使用ClipLazor库创建项目使用方法简单测...
目录简介快速入门安装 NuGet 包实体类User数据库类DbFactory...
本文实现一个简单的配置类,原理比较简单,适用于一些小型项...
C#中Description特性主要用于枚举和属性,方法比较简单,记录...
[TOC] # 原理简介 本文参考[C#/WPF/WinForm/程序实现软件开机...
目录简介获取 HTML 文档解析 HTML 文档测试补充:使用 CSS 选...