- Home
- Forum
- ASP.NET Core - EJ 2
- Questions about the Essential Studio Data Grid Sample Project
Questions about the Essential Studio Data Grid Sample Project
After creating the sample project, we executed it as it is.
However, the data built as a sample were not expressed on the grid. I would appreciate it if you could let me know how to solve it.
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
DataGridController.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using System.ComponentModel.DataAnnotations;
using System.Collections;
using Syncfusion.EJ2.Base;
namespace TESTTESTTEST.Controllers
{
public class DataGridController : Controller
{
public IActionResult DataGridFeatures()
{
var data = OrdersDetails.GetAllRecords();
ViewBag.dataSource = data;
return View();
}
public IActionResult UrlDatasource([FromBody]DataManagerRequest dm)
{
IEnumerable DataSource = OrdersDetails.GetAllRecords();
DataOperations operation = new DataOperations();
if (dm.Search != null && dm.Search.Count > 0)
{
DataSource = operation.PerformSearching(DataSource, dm.Search); //Search
}
if (dm.Sorted != null && dm.Sorted.Count > 0) //Sorting
{
DataSource = operation.PerformSorting(DataSource, dm.Sorted);
}
if (dm.Where != null && dm.Where.Count > 0) //Filtering
{
DataSource = operation.PerformFiltering(DataSource, dm.Where, dm.Where[0].Operator);
}
int count = DataSource.Cast<OrdersDetails>().Count();
if (dm.Skip != 0)
{
DataSource = operation.PerformSkip(DataSource, dm.Skip); //Paging
}
if (dm.Take != 0)
{
DataSource = operation.PerformTake(DataSource, dm.Take);
}
return dm.RequiresCounts ? Json(new { result = DataSource, count = count }) : Json(DataSource);
}
public ActionResult Update([FromBody]CRUDModel<OrdersDetails> value)
{
var ord = value.Value;
OrdersDetails val = OrdersDetails.GetAllRecords().Where(or => or.OrderID == ord.OrderID).FirstOrDefault();
val.OrderID = ord.OrderID;
val.EmployeeID = ord.EmployeeID;
val.CustomerID = ord.CustomerID;
val.Freight = ord.Freight;
val.OrderDate = ord.OrderDate;
val.ShipCity = ord.ShipCity;
return Json(value.Value);
}
//insert the record
public ActionResult Insert([FromBody]CRUDModel<OrdersDetails> value)
{
OrdersDetails.GetAllRecords().Insert(0, value.Value);
return Json(value.Value);
}
//Delete the record
public ActionResult Delete([FromBody]CRUDModel<OrdersDetails> value)
{
OrdersDetails.GetAllRecords().Remove(OrdersDetails.GetAllRecords().Where(or => or.OrderID == int.Parse(value.Key.ToString())).FirstOrDefault());
return Json(value);
}
}
public class OrdersDetails
{
public static List<OrdersDetails> order = new List<OrdersDetails>();
public OrdersDetails()
{
}
public OrdersDetails(int OrderID, string CustomerId, int EmployeeId, double Freight, Boolean Verified, DateTime OrderDate, string ShipCity, string ShipName, string ShipCountry, DateTime ShippedDate, string ShipAddress)
{
this.OrderID = OrderID;
this.CustomerID = CustomerId;
this.EmployeeID = EmployeeId;
this.Freight = Freight;
this.ShipCity = ShipCity;
this.Verified = Verified;
this.OrderDate = OrderDate;
this.ShipName = ShipName;
this.ShipCountry = ShipCountry;
this.ShippedDate = ShippedDate;
this.ShipAddress = ShipAddress;
}
public static List<OrdersDetails> GetAllRecords()
{
if (order.Count() == 0)
{
int code = 10000;
for (int i = 1; i < 10; i++)
{
order.Add(new OrdersDetails(code + 1, "ALFKI", i + 0, 2.3 * i, false, new DateTime(1991, 05, 15), "Berlin", "Simons bistro", "Denmark", new DateTime(1996, 7, 16), "Kirchgasse 6"));
order.Add(new OrdersDetails(code + 2, "ANATR", i + 2, 3.3 * i, true, new DateTime(1990, 04, 04), "Madrid", "Queen Cozinha", "Brazil", new DateTime(1996, 9, 11), "Avda. Azteca 123"));
order.Add(new OrdersDetails(code + 3, "ANTON", i + 1, 4.3 * i, true, new DateTime(1957, 11, 30), "Cholchester", "Frankenversand", "Germany", new DateTime(1996, 10, 7), "Carrera 52 con Ave. Bolívar #65-98 Llano Largo"));
order.Add(new OrdersDetails(code + 4, "BLONP", i + 3, 5.3 * i, false, new DateTime(1930, 10, 22), "Marseille", "Ernst Handel", "Austria", new DateTime(1996, 12, 30), "Magazinweg 7"));
order.Add(new OrdersDetails(code + 5, "BOLID", i + 4, 6.3 * i, true, new DateTime(1953, 02, 18), "Tsawassen", "Hanari Carnes", "Switzerland", new DateTime(1997, 12, 3), "1029 - 12th Ave. S."));
code += 5;
}
}
return order;
}
public int? OrderID { get; set; }
public string CustomerID { get; set; }
public int? EmployeeID { get; set; }
public double? Freight { get; set; }
public string ShipCity { get; set; }
public Boolean Verified { get; set; }
public DateTime OrderDate { get; set; }
public string ShipName { get; set; }
public string ShipCountry { get; set; }
public DateTime ShippedDate { get; set; }
public string ShipAddress { get; set; }
}
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
DataGridFeatures.cshtml
<ejs-grid id="DataGrid" dataSource ="ViewBag.dataSource"
allowPaging="true"
allowSorting="false" allowResizing="false" allowFiltering="false" allowGrouping="false" toolbar="@(new List<string>() { "Add", "Edit", "Delete", "Update", "Cancel","Search" })">
<e-data-manager url="@Url.Action("UrlDatasource", "DataGrid")" insertUrl="/DataGrid/Insert" updateUrl="/DataGrid/Update" removeUrl="/DataGrid/Delete" adaptor="UrlAdaptor"></e-data-manager>
<e-grid-editSettings allowAdding="true" allowDeleting="true" allowEditing="true" mode="Batch"></e-grid-editSettings>
<e-grid-pagesettings pageCount="5"></e-grid-pagesettings>
<e-grid-columns>
<e-grid-column field="OrderID" validationRules="@(new { required=true})" headerText="Order ID" minWidth="120" width="200" maxWidth="300" textAlign="Right"></e-grid-column>
<e-grid-column field="CustomerID" headerText="Customer Name" validationRules="@(new { required=true})" minWidth="8" width="200"></e-grid-column>
<e-grid-column field="OrderDate" headerText=" Order Date" editType="datepickeredit" textAlign="Right" format="yMd" minWidth="8" width="200"></e-grid-column>
<e-grid-column field="Freight" headerText="Freight" validationRules="@(new { required=true})" allowResizing="true" editType="numericedit" textAlign="Right" format="C2" width="150" minWidth="8"></e-grid-column>
<e-grid-column field="ShipName" headerText="Ship Name" minWidth="8" width="300"></e-grid-column>
<e-grid-column field="ShippedDate" headerText="Shipped Date" textAlign="Right" format="yMd" allowResizing="false" width="200"></e-grid-column>
<e-grid-column field="ShipCountry" headerText="Ship Country" editType="dropdownedit" minWidth="8" width="200"></e-grid-column>
<e-grid-column field="Verified" displayAsCheckBox="true" type="boolean" headerText="Verified" editType="booleanedit" minWidth="8" width="200"></e-grid-column>
</e-grid-columns>
</ejs-grid>
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Results page
Greetings from Syncfusion support.
We checked your query and provided information, based on that we could see that you are using UrlAdaptor of the DataManager to bind the data in the Grid and facing the Grid render rows without data issue. For this, we would like to let you know that the reported issue was occurring due to the serialization problem in the ASP.NET Core where it returns the JSON results in camelCase format by default, So grid field names are also changed in camelCase.
To avoid this problem, please follow the below steps.
If the ASP.NET CORE version is 2.X then add the below code in startup.cs file
|
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc().AddJsonOptions(options =>
{
options.SerializerSettings.ContractResolver = new Newtonsoft.Json.Serialization.DefaultContractResolver();
});
} |
|
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc().AddNewtonsoftJson(options =>
{
options.SerializerSettings.ContractResolver = new DefaultContractResolver();
}); } |
Also, we found that you are using both the dataSource property and the instance of DataManager for binding data in the Grid. For this, we would like to inform you that if you want to bind the remote data to the grid component, assign service data as an instance of DataManager to the dataSource property only. To interact with remote data source, provide the endpoint url.
And if you want to use batch editing mode in the Grid, You can map the CRUD operation in grid can be mapped to server-side Controller actions using the BatchUrl property as demonstrated in the below code example.
|
<ejs-grid id="Grid" allowPaging="true" toolbar="@(new List<string>() { "Add", "Delete", "Update", "Cancel"})>
<e-data-manager url="@Url.Action("UrlDatasource", "Home")" batchUrl="/Home/BatchUpdate" adaptor="UrlAdaptor"></e-data-manager> <e-grid-editSettings allowAdding="true" allowDeleting="true" allowEditing="true" mode="Batch"></e-grid-editSettings>
<e-grid-columns>
...
</e-grid-columns>
</ejs-grid> |
We have prepared a sample based on this for your reference,
Sample: https://www.syncfusion.com/downloads/support/forum/169846/ze/BatchUrl1915157698.zip
Please check the below documentation link for more details on this,
Documentation: https://ej2.syncfusion.com/aspnetcore/documentation/grid/edit/#batch-url
Please get back to us if you need further assistance.
Regards,
Praveenkumar G
- 1 Reply
- 2 Participants
-
TK TaeWook Kang
- Oct 22, 2021 06:30 AM UTC
- Oct 25, 2021 10:49 AM UTC