【发布时间】:2014-08-28 16:36:51
【问题描述】:
假设我有 80 个项目的网格,页面大小为 10,当从控制器打印时,我想打印所有数据,而不仅仅是第一页上的可见数据。
我有来自 Telerik 的优秀“Export Grid to Excel”测试项目,并且我已经将导出功能全部覆盖,并且工作起来就像一个魅力。基本上只包含 NPOI 文件并开始使用它。
有没有办法让我从 DataSourceRequest 中迭代所有产品数据?
我的代码示例:
public FileResult Export([DataSourceRequest]DataSourceRequest request)
{
//Get the data representing the current grid state - page, sort and filter
IEnumerable products = db.Products.ToDataSourceResult(request).Data;
//TODO: Get all data but not just the data from the visible page as above!!!
//Create new Excel workbook
var workbook = new HSSFWorkbook();
//Create new Excel sheet
var sheet = workbook.CreateSheet();
//(Optional) set the width of the columns
sheet.SetColumnWidth(0, 10 * 256);
sheet.SetColumnWidth(1, 50 * 256);
sheet.SetColumnWidth(2, 50 * 256);
sheet.SetColumnWidth(3, 50 * 256);
//Create a header row
var headerRow = sheet.CreateRow(0);
//Set the column names in the header row
headerRow.CreateCell(0).SetCellValue("Product ID");
headerRow.CreateCell(1).SetCellValue("Product Name");
headerRow.CreateCell(2).SetCellValue("Unit Price");
headerRow.CreateCell(3).SetCellValue("Quantity Per Unit");
//(Optional) freeze the header row so it is not scrolled
sheet.CreateFreezePane(0, 1, 0, 1);
int rowNumber = 1;
//Populate the sheet with values from the grid data
foreach (Product product in products)
{
//Create a new row
var row = sheet.CreateRow(rowNumber++);
//Set values for the cells
row.CreateCell(0).SetCellValue(product.ProductID);
row.CreateCell(1).SetCellValue(product.ProductName);
row.CreateCell(2).SetCellValue(product.UnitPrice.ToString());
row.CreateCell(3).SetCellValue(product.QuantityPerUnit.ToString());
}
//Write the workbook to a memory stream
MemoryStream output = new MemoryStream();
workbook.Write(output);
//Return the result to the end user
return File(output.ToArray(), //The binary data of the XLS file
"application/vnd.ms-excel", //MIME type of Excel files
"GridExcelExport.xls"); //Suggested file name in the "Save as" dialog which will be displayed to the end user
}
【问题讨论】:
-
所以你不想使用分页,但你想使用过滤?
-
嗯,实际上是的@Stef。但我希望能够打印带有完整数据的 excel 表。但是,如果用户对列进行了重新排序、对列进行了排序或对网格进行了任何操作,那么我希望将其感染到控制器中的 excel 创建中,因此我也需要过滤:/
标签: c# excel kendo-ui telerik kendo-grid