public ActionResult GetGridData(string sidx, string sord, string filters, int page, int rows, string tableName, WebISGDatabaseType databaseType)
        {
            var jsonData = new JsonResult();
            if (string.IsNullOrEmpty(tableName))
            {
                return jsonData;
            }
            var filterData = filters != null ? JsonConvert.DeserializeObject<FilterDataObject>(filters) : new FilterDataObject();

            var rowCount = WebDataTable.GetRowCount(tableName, filterData, databaseType);

            var currentPage = page;
            var pageIndex = currentPage - 1;
            var pageSize = rows != -1 ? rows : rowCount;
            var totalRecords = rowCount;
            var totalPages = (int)Math.Ceiling(totalRecords / (float)pageSize);

            var dataTable = new WebDataTable(tableName, sidx, sord, pageIndex, pageSize, filterData, databaseType);

            var rowData = new
            {
                total = totalPages,
                page = currentPage,
                records = totalRecords,
                rows =
                    (
                        from row in dataTable.Rows
                        select new
                        {
                            id = row.RowId,
                            cell = row.CellValueArray
                        }
                        ).ToArray()
            };

            jsonData = Json(rowData, JsonRequestBehavior.AllowGet);
            return jsonData;
        }
        /// <summary>
        ///  This method is called to allow the user to download the entire table as a CSV file.
        /// </summary>
        /// <returns></returns>
        public FileStreamResult DownloadFullExcel(string id, WebISGDatabaseType databaseType, bool showHiddenColumns = false)
        {
            //Create a workbook & worksheet
            var wb = new XLWorkbook();
            var ws = wb.Worksheets.Add(id);

            if (!string.IsNullOrEmpty(id))
            {
                var filterData = new FilterDataObject();
                var rowCount = WebDataTable.GetRowCount(id, filterData, databaseType);
                var dataTable = new WebDataTable(id, "", "asc", 0, rowCount, filterData, databaseType);

                // get column headers
                var colHeaders = dataTable.Columns
                    .Where(c => !c.Name.Equals("act") &&
                        (showHiddenColumns || c.Hidden.ToLower() != "true"))
                    .Select(cd => cd.FriendlyName ?? string.Empty)
                    .ToArray();

                // get row data
                var rowsToInsert = new List<Array>();
                // ReSharper disable once LoopCanBeConvertedToQuery
                foreach (var row in dataTable.Rows)
                {
                    rowsToInsert.Add(
                        row.Cells
                        .Where(cd => showHiddenColumns || cd.Column.Hidden.ToLower() != "true")
                        .Select(cd => cd.Value ?? string.Empty)
                        .ToArray()
                    );
                }

                // add data to worksheet
                for (var i = 0; i < colHeaders.Length; i++)
                {
                    ws.Cell(1, i + 1).Value = colHeaders[i];
                }
                // ReSharper disable once UnusedVariable
                var table = ws.Cell(1, 1).InsertTable(rowsToInsert);
                ws.Columns().AdjustToContents(1,99);
            }

            var memoryStream = new MemoryStream();
            wb.SaveAs(memoryStream);
            memoryStream.Flush();
            memoryStream.Position = 0;

            return File(memoryStream, "application/vnd.ms-excel", string.Format("{0}.xlsx", id));
        }