I have a dynamic grid in kendo the column names and column number changes will be different based on conditions.I am not able to export since it is a dynamic list
I have provided the code below
.cshtml
$(".download").click(function () {
var grid = $("#Grid").data("kendoGrid");
var options = {
format: $(this).data("format"),
title: 'Testreport'
}
var parsedInput = GetInputDataTransfer();
var ChkBoxvalues = parsedInput.InputChkBoxValues;
$("#export-data").val(encodeURIComponent(JSON.stringify(options)));
$("#export-model").val(encodeURIComponent(JSON.stringify(grid.columns)));
$("#export-chkbox").val(ChkBoxvalues);
$("#export-tabId").val(currentTabId);
});
Controller action method:
when i try to convert my list to excel it throws object reference error
public FileStreamResult ExportServer(string model, string data, string selectedInputChkBoxValues, string tabId)
{
try
{
string projnumber = (string)Session[$"projectSelection_{tabId}"];
GetProjectDetails(projnumber);
UserInfo uInfo = ApplicationData.GetUserInfoFromSession();
ProjectDetails CurrentProject = uInfo.CurrentProject;
string ProjectNo = Convert.ToString(CurrentProject);
DataSet dataSet = PLDeliveryViewBL.Display(ProjectNo, selectedInputChkBoxValues);
var dcolumns = JsonConvert.DeserializeObject<IList<ExportColumnSettings>>(HttpUtility.UrlDecode(model));
// Minimal column settings
var columnsData = dcolumns.ToList();
List<dynamic> dlist = new List<dynamic>();
if (dataSet.Tables.Count > 0 && dcolumns != null)
{
for (var rowCount = 0; rowCount < dataSet.Tables[1].Rows.Count; rowCount++)
{
dynamic obj = new ExpandoObject();
var objDict = (IDictionary<string, object>)obj;
foreach (var column in dcolumns)
{
string columnName = column.Field;
objDict[columnName] = dataSet.Tables[1].Rows[rowCount][columnName];
}
dlist.Add(obj);
}
}
// Minimal options
dynamic options = JsonConvert.DeserializeObject(HttpUtility.UrlDecode(data));
string title = options["title"].ToString();
string format = options["format"].ToString();
// Call the method to generate the stream
Stream exportStream = null;
try
{
exportStream = dlist.ToXlsxStream(columnsData, title);
}
catch (Exception ex)
{
throw;
}
// Prepare the result
SpreadDocumentFormat exportFormat = SpreadDocumentFormat.Xlsx;
string fileName = $"{title}.{format}";
string mimeType = Helpers.GetMimeType(exportFormat);
var fileStreamResult = new FileStreamResult(exportStream, mimeType)
{
FileDownloadName = fileName
};
fileStreamResult.FileStream.Seek(0, SeekOrigin.Begin);
return fileStreamResult;
}
catch (Exception ex)
{
throw;
}
}
Any solution can be provided?