public static string ExportWithReportViewer(string jsonRaw, tpeExport tpe) { var bytes = Arquitetura.Controllers.ReportViewerController.ExportByJsonParams(jsonRaw, tpe); string dtNow = DateTime.Now.ToString("ddMMyyyyhhmmssffffff"); string fleName = (dtNow + Convert.ToString(".")) + bytes.fileNameExtension; string outUrl = (dtNow + Convert.ToString("/")) + bytes.fileNameExtension; if (!Directory.Exists(HostingEnvironment.MapPath("~/Temp"))) { Directory.CreateDirectory(HostingEnvironment.MapPath("~/Temp")); } File.WriteAllBytes(Path.Combine(HostingEnvironment.MapPath("~/Temp"), fleName), bytes.array); return(VirtualPathUtility.ToAbsolute(Convert.ToString("~/api/Temp/DownloadTemp/") + outUrl)); }
public static ReportViewerReturn Render(DataTable table, List <string> allFields, List <KeyValuePair <string, bool> > selectedFields, List <KeyValuePair <string, bool> > headers, tpeExport exportFormat) { AppDomainSetup setup = new AppDomainSetup { ApplicationBase = Environment.CurrentDirectory, LoaderOptimization = LoaderOptimization.MultiDomainHost }; setup.SetCompatibilitySwitches(new[] { "NetFx40_LegacySecurityPolicy" }); AppDomain _casPolicyEnabledDomain = AppDomain.CreateDomain("Full Trust", null, setup); try { FullTrustReportViewer rvNextgenReport2 = (FullTrustReportViewer)_casPolicyEnabledDomain.CreateInstanceFromAndUnwrap(typeof(FullTrustReportViewer).Assembly.CodeBase, typeof(FullTrustReportViewer).FullName); // rvNextgenReport2.LoadReportDefinition(allFields, selectedFields, headers); rvNextgenReport2.AddDataSources(table); // var exportName = string.Empty; switch (exportFormat) { case tpeExport.Excel2003: exportName = "Excel"; break; case tpeExport.Excel: exportName = "EXCELOPENXML"; break; case tpeExport.Word2003: exportName = "Word"; break; case tpeExport.Word: exportName = "WORDOPENXML"; break; case tpeExport.PDF: exportName = "PDF"; break; case tpeExport.Image: exportName = "IMAGE"; break; } // string mimeType; string fileNameExtension; // byte[] array = rvNextgenReport2.Render(exportName, out mimeType, out fileNameExtension); return(new ReportViewerReturn() { array = array, fileNameExtension = fileNameExtension, mimeType = mimeType }); } finally { AppDomain.Unload(_casPolicyEnabledDomain); } }
public static ReportViewerReturn ExportByJsonParams(string jsonRaw, tpeExport exportFormat) { var jsonDeserialize = (JObject)JsonConvert.DeserializeObject(jsonRaw); var infoDict = new Dictionary <String, List <String> >(); var columnsDict = new Dictionary <String, List <String> >(); foreach (var kvpjObject in jsonDeserialize) { foreach (var obj in kvpjObject.Value) { var itmDict = new Dictionary <String, String>(); if (obj is JObject) { var jObj = (JObject)obj; foreach (var jProp in jObj.Properties()) { var name = jProp.Name; var value = ((JValue)(jProp.Value)).Value; var strValue = String.Empty; if (jProp.Value != null) { strValue = jProp.Value.ToString().Trim(); } itmDict.Add(name, strValue); } } else if (obj is JArray) { var jArr = (JArray)obj; var i = 0; foreach (var jProp in jArr) { var strValue = String.Empty; if (jProp.Value <object>() != null) { strValue = jProp.Value <object>().ToString().Trim(); } itmDict.Add(i.ToString(), strValue); i++; } } var kvpWork = new Dictionary <String, List <String> >(); switch (kvpjObject.Key) { case "ajax": kvpWork = infoDict; break; case "columns": kvpWork = columnsDict; break; } foreach (var kvp in itmDict) { if (!kvpWork.ContainsKey(kvp.Key)) { kvpWork.Add(kvp.Key, new List <String>()); } kvpWork[kvp.Key].Add(kvp.Value); } } } if (infoDict.Count > 0 && columnsDict.Count > 0) { var dtt = new DataTable(); foreach (var val in infoDict) { var dtCol = dtt.Columns.Add("col" + val.Key); decimal Out; if (val.Value.Where(x => !decimal.TryParse(x, out Out)).Count() == 0) { dtCol.DataType = typeof(decimal); } } for (var i = 0; i < infoDict.First().Value.Count; i++) { var arrVals = new List <string>(); foreach (var col in infoDict) { arrVals.Add(col.Value[i]); } dtt.Rows.Add(arrVals.ToArray()); } var lstColsVals = new List <Dictionary <string, string> >(); for (var i = 0; i < columnsDict.First().Value.Count; i++) { var arrVals = new Dictionary <string, string>(); foreach (var col in columnsDict) { arrVals.Add(col.Key, col.Value[i]); } lstColsVals.Add(arrVals); } var lstHeaders = lstColsVals .Where(x => x["visible"].Equals("true")).Select(x => new { header = x["header"], dataSrc = "col" + x["dataSrc"] }) .Where(x => dtt.Columns.Contains(x.dataSrc)) .ToList(); var lstColsAll = lstColsVals .Select(x => "col" + x["dataSrc"]) .Where(x => dtt.Columns.Contains(x)) .ToList(); var lstColsOrder = lstColsVals .Where(x => !x["order"].Equals(String.Empty)) .Select(x => new { col = "col" + x["dataSrc"], asc = x["order"].Equals("asc") }) .Where(x => dtt.Columns.Contains(x.col)) .ToList(); var lstColsSel = lstColsVals .Where(x => x["visible"].Equals("true")).Select(x => "col" + x["dataSrc"]) .Where(x => dtt.Columns.Contains(x)) .ToList(); // var selectedFields = new List <KeyValuePair <string, bool> >(); var headers = new List <KeyValuePair <string, bool> >(); // foreach (var lstHead in lstHeaders) { var isNumericType = dtt.Columns[lstHead.dataSrc].DataType.Equals(typeof(decimal)); headers.Add(new KeyValuePair <string, bool>(lstHead.header, isNumericType)); } foreach (var lstSel in lstColsSel) { var isNumericType = dtt.Columns[lstSel].DataType.Equals(typeof(decimal)); selectedFields.Add(new KeyValuePair <string, bool>(lstSel, isNumericType)); } // DataTable tableSend = null; var comma = false; if (lstColsOrder.Count > 0) { foreach (var order in lstColsOrder) { dtt.DefaultView.Sort = string.Concat( (comma ? ", " : ""), order.col, " ", (order.asc ? "ASC" : "DESC")); comma = true; } tableSend = dtt.DefaultView.ToTable(); } else { tableSend = dtt; } return(Render(tableSend, lstColsAll, selectedFields, headers, exportFormat)); } return(null); }