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

캡처.PNG



1 Reply

PG Praveenkumar Gajendiran Syncfusion Team October 25, 2021 10:49 AM UTC

Hi TaeWook,

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(); 
    }); 
 
If the ASP.NET CORE version is 3.X then add the below code in startup.cs file 
 
public void ConfigureServices(IServiceCollection services) 
    services.AddMvc().AddNewtonsoftJson(options => 
    { 
        options.SerializerSettings.ContractResolver = new DefaultContractResolver();
    });  

Please check the below documentation link for more details on this, 

Documentation: https://ej2.syncfusion.com/aspnetcore/documentation/grid/data-binding/#troubleshoot-grid-render-rows-without-data

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



Loader.
Up arrow icon