|
<div id="Grid"></div>
<script type="text/javascript">
$(function () {
var customAdaptor = new ej.ODataV4Adaptor().extend({
processResponse: function (data, ds, query, xhr, request, changes) {
result = this.base.processResponse.apply(this, [data, ds, query, xhr, request, changes]);
……..
return result;
}
});
var dataManager = new ej.DataManager({
url: "/Odata/Orders/", adaptor: new ej.ODataV4Adaptor()
});
$("#Grid").ejGrid({
toolbarSettings: { showToolbar: true, toolbarItems: [ej.Grid.ToolBarItems.ExcelExport, ej.Grid.ToolBarItems.WordExport, ej.Grid.ToolBarItems.PdfExport] },
dataSource: dataManager,
columns: [
………..
],
toolbarClick: function (e) {
this.exportGrid = this["export"];
if (e.itemName == "Excel Export") {
this.exportGrid("/Odata/Orders/ExcelExport")
e.cancel = true;
}
else if (e.itemName == "Word Export") {
this.exportGrid('/Odata/Orders /WordExport')
e.cancel = true;
}
else if (e.itemName == "PDF Export") {
this.exportGrid(‘/Odata/Orders /PdfExport')
e.cancel = true;
}
},
});
});
</script>
Controller Page:
[System.Web.Http.AcceptVerbs("Post")]
[ODataRoute("/ExcelExport")]
public void ExcelExport()
{
GridExcelExport GridExp = new GridExcelExport();
string gridModel = HttpContext.Current.Request.Params["GridModel"];
GridProperties gridProperty = ConvertGridObject(gridModel);
ExcelExport exp = new ExcelExport();
IEnumerable<Order> result = db.Orders.Take(100).ToList();
GridExp.Theme = "default-theme";
GridExp.FileName = "Export.xlsx";
exp.Export(gridProperty, result, GridExp);
}
[System.Web.Http.AcceptVerbs("Post")]
[ODataRoute("/PdfExport")]
public void PdfExport()
{
GridPdfExport GridExp = new GridPdfExport();
string gridModel = HttpContext.Current.Request.Params["GridModel"];
GridProperties gridProperty = ConvertGridObject(gridModel);
PdfExport exp = new PdfExport();
IEnumerable<Order> result = db.Orders.Take(100).ToList();
GridExp.Theme = "default-theme";
GridExp.FileName = "Export.pdf";
exp.Export(gridProperty, result, GridExp);
}
[System.Web.Http.AcceptVerbs("Post")]
[ODataRoute("/WordExport")]
public void WordExport()
{
GridWordExport GridExp = new GridWordExport();
string gridModel = HttpContext.Current.Request.Params["GridModel"];
GridProperties gridPropert = ConvertGridObject(gridModel);
WordExport exp = new WordExport();
IEnumerable<Order> data = db.Orders.Take(100).ToList();
GridExp.Theme = "default-theme";
GridExp.FileName = "Export.docx";
exp.Export(gridPropert, (IEnumerable)data, GridExp);
}
private GridProperties ConvertGridObject(string gridProperty)
{
JavaScriptSerializer serializer = new JavaScriptSerializer();
IEnumerable div = (IEnumerable)serializer.Deserialize(gridProperty, typeof(IEnumerable));
GridProperties gridProp = new GridProperties();
foreach (KeyValuePair<string, object> ds in div)
{
var property = gridProp.GetType().GetProperty(ds.Key, BindingFlags.Instance | BindingFlags.Public | BindingFlags.IgnoreCase);
………
value = serializer.Deserialize(serialize, type);
property.SetValue(gridProp, value, null);
}
}
return gridProp;
}
|
|
<script>
function load(args) {
this.ignoreOnExport.splice(this.ignoreOnExport.indexOf('dataSource'), 1);
}
</script>
public class HomeController : Controller
{
IEnumerable<EditableOrder> currentData = null;
...
public void ExportToExcel(string GridModel)
{
ExcelExport exp = new ExcelExport();
GridProperties obj = ConvertGridObject(GridModel);
exp.Export(obj, currentData, "Export.xlsx", ExcelVersion.Excel2010, false, false, "flat-saffron");
}
...
private GridProperties ConvertGridObject(string gridProperty)
{
JavaScriptSerializer serializer = new JavaScriptSerializer();
IEnumerable div = (IEnumerable)serializer.Deserialize(gridProperty, typeof(IEnumerable));
GridProperties gridProp = new GridProperties();
foreach (KeyValuePair<string, object> ds in div)
{
//Check and retrieve additional property here
if (ds.Key == "dataSource")
{
foreach (KeyValuePair<string, object> data in (dynamic)ds.Value)
{
if (data.Key == "dataSource")
{
foreach (KeyValuePair<string, object> data1 in (dynamic)data.Value)
{
if (data1.Key == "json")
{
string serial = serializer.Serialize(data1.Value);
currentData = JsonConvert.DeserializeObject<IEnumerable<EditableOrder>>(serial);
break;
}
}
}
}
}
...
return gridProp;
}
|
export class BaseGridComponent implements OnInit {
private dataUrl: string = "";
ngOnInit(): void {
this.customAdaptor = new CustomOdataAdaptor();
this.customAdaptor.urlChanged = ((url: string) => {
this.dataUrl = url;
});
var dm = new ej.DataManager({
url: http://server/odata/entity,
crossDomain: true,
headers: [{ 'Accept': 'application/json' }, { 'Content-Type': 'application/json' }],
adaptor: this.customAdaptor
});
}
toolbarClick(args: any): void {
if (args.itemName == "Export") {
grid.export('/api/export/ExcelExport?odataurl=' + encodeURI(this.dataUrl));
args.cancel = true;
}
}
}
class CustomOdataAdaptor extends ej.ODataV4Adaptor {
constructor() {
super();
}
urlChanged: (url: string) => void;
beforeSend(dm, request, settings): void {
this.urlChanged(settings.url);
super.beforeSend(dm, request, settings);
}
processQuery(ds, query) {
return super.processQuery(ds, query);
}
processResponse(data, ds, query, xhr, request, changes) {
this.urlChanged(request.url);
return super.processResponse(data, ds, query, xhr, request, changes);
}
}
Hi Sietse,
Thanks for contacting Syncfusion support.We have analyzed your query and we found that you are trying to pass the data to server when exporting. You can get the data that is bound to the Grid using the Grid model and export them as shown in the following code example. In the Load event, we have spliced the dataSource from the ignoreOnExport array, which will include the dataSource on the Grid model while Exporting and it can be used for exporting the Grid as server end.Note: Please use load event to splice the dataSourcePlease refer the below code example.
<script>function load(args) {this.ignoreOnExport.splice(this.ignoreOnExport.indexOf('dataSource'), 1);}</script>public class HomeController : Controller{IEnumerable<EditableOrder> currentData = null;...public void ExportToExcel(string GridModel){ExcelExport exp = new ExcelExport();GridProperties obj = ConvertGridObject(GridModel);exp.Export(obj, currentData, "Export.xlsx", ExcelVersion.Excel2010, false, false, "flat-saffron");}...private GridProperties ConvertGridObject(string gridProperty){JavaScriptSerializer serializer = new JavaScriptSerializer();IEnumerable div = (IEnumerable)serializer.Deserialize(gridProperty, typeof(IEnumerable));GridProperties gridProp = new GridProperties();foreach (KeyValuePair<string, object> ds in div){//Check and retrieve additional property hereif (ds.Key == "dataSource"){foreach (KeyValuePair<string, object> data in (dynamic)ds.Value){if (data.Key == "dataSource"){foreach (KeyValuePair<string, object> data1 in (dynamic)data.Value){if (data1.Key == "json"){string serial = serializer.Serialize(data1.Value);currentData = JsonConvert.DeserializeObject<IEnumerable<EditableOrder>>(serial);break;}}}}}...return gridProp;}Refer the documentation link.Load event link: https://help.syncfusion.com/api/js/ejgrid#events:loadPlease make a note that this solution works only for the local data. We have discussed about this in the following Help Document.Please let us know if you need further assistance.Regards,Renjith Singh Rajendran.