ASP.NET Core MVC 如何将List对象数据绑定到DevExpress Spreadsheet电子表格
实现步骤
- 首先确认你要绑定的List对应的实体类结构,示例参考如下:
public class Product { public int Id { get; set; } public string Name { get; set; } public decimal Price { get; set; } public int Stock { get; set; } }
- 第二步在控制器原有逻辑中加入List数据绑定代码,你已经实例化了
Workbook对象,直接调用DevExpress Office File API内置的数据源绑定方法即可,修改后的控制器代码如下:
public ActionResult Overview(IFormFile document) { var model = new DocumentModel(); // 这里构造你需要绑定的List示例数据,实际场景可以从数据库/其他接口读取 List<Product> productList = new List<Product> { new Product { Id = 1, Name = "产品A", Price = 29.9m, Stock = 100 }, new Product { Id = 2, Name = "产品B", Price = 49.9m, Stock = 200 }, new Product { Id = 3, Name = "产品C", Price = 19.9m, Stock = 150 } }; if (document != null) { var stream = new MemoryStream(); document.CopyTo(stream); stream.Position = 0; // 要把流的位置重置到开头,否则LoadDocument会读不到内容 var workBook = new Workbook(); workBook.LoadDocument(stream); // 在这里加入List绑定逻辑 var worksheet = workBook.Worksheets[0]; // 选第一个工作表,也可以指定你要填充的工作表索引/名称 // BindToDataSource参数说明:数据源、是否生成列头、填充起始行、填充起始列 worksheet.DataBindings.BindToDataSource(productList, 0, 0); // 绑定完成后把修改后的工作簿重新写入流 stream.SetLength(0); workBook.SaveDocument(stream, DocumentFormat.Xlsx); stream.Position = 0; model.DocumentId = document.FileName; model.ContentAccessorByStream = stream; } // 如果不需要上传文件,直接生成新的工作簿填充List也可以,逻辑同上 else { var workBook = new Workbook(); var worksheet = workBook.Worksheets[0]; worksheet.DataBindings.BindToDataSource(productList, 0, 0); var stream = new MemoryStream(); workBook.SaveDocument(stream, DocumentFormat.Xlsx); stream.Position = 0; model.DocumentId = "导出数据.xlsx"; model.ContentAccessorByStream = stream; } return View("Overview", model); }
- 第三步前端Spreadsheet控件保持正常绑定
DocumentModel即可,不需要额外修改,示例前端代码参考:
@model DocumentModel @(Html.DevExpress().Spreadsheet("spreadsheet") .Width("100%") .Height("800px") .Open(Model.DocumentId, DevExpress.Spreadsheet.DocumentFormat.Xlsx, () => Model.ContentAccessorByStream) )
注意事项
- 绑定方法的第二个参数
useFirstRowAsHeader默认是true,会自动把实体类的属性名作为第一行的列头,不需要列头的话可以手动传false - 如果需要自定义列的显示顺序、列名、格式,可以在绑定前通过
Workbook的API对指定列做单独设置 - 操作流的时候一定要记得重置
Position为0,否则会出现读取空白文档的问题
内容的提问来源于stack exchange,提问作者Rado HT Simarmata
相关产品推荐
相关产品推荐

