Advertisement
Guest User

Nikolay.IT

a guest
Oct 11th, 2012
1,075
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 3.22 KB | None | 0 0
  1.     public class KendoGridAdminController : Controller
  2.     {
  3.         public virtual IEnumerable GetData()
  4.         {
  5.             return null;
  6.         }
  7.  
  8.         [HttpGet]
  9.         public FileResult ExportToExcel([DataSourceRequest]DataSourceRequest request)
  10.         {
  11.             var data = GetData();
  12.             Type dataType = data.GetType().GetGenericArguments()[0];
  13.             var dataTypeProperties = dataType.GetProperties();
  14.             if (data == null || dataType == null)
  15.             {
  16.                 throw new Exception("GetData() and DataType must be overriden");
  17.             }
  18.  
  19.             //Get the data representing the current grid state - page, sort and filter
  20.             IEnumerable items = data.ToDataSourceResult(request).Data;
  21.  
  22.             //Create new Excel workbook
  23.             var workbook = new HSSFWorkbook();
  24.  
  25.             //Create new Excel sheet
  26.             var sheet = workbook.CreateSheet();
  27.  
  28.             // Create a header row
  29.             var headerRow = sheet.CreateRow(0);
  30.             int columnNumber = 0;
  31.             foreach (var property in dataTypeProperties)
  32.             {
  33.                 string cellName = property.Name;
  34.                 object[] attributes = property.GetCustomAttributes(typeof(DisplayAttribute), true);
  35.                 if (attributes != null && attributes.Count() > 0)
  36.                 {
  37.                     DisplayAttribute attribute = attributes[0] as DisplayAttribute;
  38.                     cellName = attribute.Name ?? property.Name;
  39.                 }
  40.                 headerRow.CreateCell(columnNumber++).SetCellValue(cellName);
  41.             }
  42.  
  43.             //(Optional) freeze the header row so it is not scrolled
  44.             sheet.CreateFreezePane(0, 1, 0, 1);
  45.  
  46.             int rowNumber = 1;
  47.  
  48.             //Populate the sheet with values from the grid data
  49.             foreach (object item in items)
  50.             {
  51.                 //Create a new row
  52.                 var row = sheet.CreateRow(rowNumber++);
  53.  
  54.                 int cellNumber = 0;
  55.                 foreach (var property in dataTypeProperties)
  56.                 {
  57.                     object propertyValue = item.GetType().GetProperty(property.Name).GetValue(item, null);
  58.                     if (propertyValue == null)
  59.                     {
  60.                         row.CreateCell(cellNumber++).SetCellType(NPOI.SS.UserModel.CellType.BLANK);
  61.                     }
  62.                     else
  63.                     {
  64.                         row.CreateCell(cellNumber++).SetCellValue(propertyValue.ToString());
  65.                     }
  66.                 }
  67.             }
  68.  
  69.             // Autosize all columns
  70.             for (int i = 0; i < columnNumber; i++)
  71.             {
  72.                 sheet.AutoSizeColumn(i);
  73.             }
  74.  
  75.             //Write the workbook to a memory stream
  76.             MemoryStream output = new MemoryStream();
  77.             workbook.Write(output);
  78.  
  79.             //Return the result to the end user
  80.             return File(output.ToArray(),   //The binary data of the XLS file
  81.                 "application/vnd.ms-excel", //MIME type of Excel files
  82.                 "GridExcelExport.xls");     //Suggested file name in the "Save as" dialog which will be displayed to the end user
  83.         }
  84.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement