This is a migrated thread and some comments may be shown as answers.

Json Data ToDataSourceResult

5 Answers 603 Views
Grid
This is a migrated thread and some comments may be shown as answers.
Jalen
Top achievements
Rank 1
Jalen asked on 23 Dec 2016, 08:59 AM

Hi~

I tried to save Grid data in Json format and send it back to controller to combine new query result, then return

back to Grid together.

My controller could get Json result from javascript as string, but the controller return format require .ToDataSourceResult

However, when I return string.ToDataSourceResult, it shows error.

How could I fix this?

public ActionResult ChemicalTestResult_Read([DataSourceRequest] DataSourceRequest request, string param1, string displayedDataAsJSON)
{
    try
    {
        if (param1 != null && param1 != "")
        {
            var TestId = param1.Split(',').Reverse().ToList();
            return Json(db.LIMS_Chemical_TestResult.Where(o => param1.Contains(o.TestId) && (o.Result_1 == null || o.Result_2 == null || o.Result_3 == null) && (o.isPermitted == "不合格" || o.isPermitted == null)).ToDataSourceResult(request));                   
        }
        else
        {
            return stringdisplayedDataAsJSON.ToDataSourceResult(request);
        }
    }
    catch (Exception ex)
    {
        logger.Error(ex, "ChemicalTestResultController");
        return new JavaScriptResult { Script = "alert('" + ex.ToString() + "');" };
    }
}
var displayedData = $("#grid").data().kendoGrid.dataSource.view()
var displayedDataAsJSON = JSON.stringify(displayedData);

5 Answers, 1 is accepted

Sort by
0
Alexander Popov
Telerik team
answered on 26 Dec 2016, 12:07 PM
Hi Jalen,

I am not sure I understand the scenario very well. Would you mind sharing a bit more code snippets and the value of stringdisplayedDataAsJSON or ideally - a runnable sample project? That would allow us to investigate.

Regards,
Alexander Popov
Telerik by Progress
Try our brand new, jQuery-free Angular 2 components built from ground-up which deliver the business app essential building blocks - a grid component, data visualization (charts) and form elements.
0
Jalen
Top achievements
Rank 1
answered on 28 Dec 2016, 08:50 AM

I solve that issue but I got a new one...

I tried to update my edit row, however, there's an error with the JSON DateTime format.

I have two datetime fields, and I used an action to modify their value and the data could be saved.

But kendo grid show an error alert that DateTime format is not valid.

 

function query() {
 
    var s = "";
    var gridWidget = $('#grid').data("kendoGrid");
    var displayedData = $("#grid").data().kendoGrid.dataSource.view();
    var displayedDataAsJSON = JSON.parse(JSON.stringify(displayedData));
    gridWidget.dataSource.data(s);
    s = BarCode.value;
        $.ajax({
            type: 'Get',
            url: '/TestResult/ChemicalTestResult/ChemicalTestResult_Read',
            contentType: 'application/json; charset=utf-8',
            data: { s: s},
            dataType: 'json',
            success:function(data){                  
                var a = 0;
                for(i = 0; i< displayedDataAsJSON.length; i++){   
                    if (data[0].TestId != null){
                        if(displayedDataAsJSON[i].TestId == data[0].TestId){
                            a = 1;
                        }
                    }
                }
 
                if (a == 0 || displayedDataAsJSON.length == 0) {
                    var json = displayedDataAsJSON.concat(data);
                    gridWidget.dataSource.data(json);
                } else {
                    gridWidget.dataSource.data(displayedDataAsJSON);
                }
            },
            error:function(xhr) {
                alert(xhr.responseText);
            }
        })
}

 

01.@(Html.Kendo().Grid<Template.Areas.TestResult.Models.LIMS_Chemical_TestResult>()
02..Name("grid")
03..Columns(columns =>
04.{
05.    columns.Bound(p => p.TestId).Width(120);
06.    columns.ForeignKey(p => p.TestNo, (System.Collections.IEnumerable)ViewData["TestDesc"], "TestNo", "TestDesc").Width(90);
07.    columns.ForeignKey(p => p.TagNo, (System.Collections.IEnumerable)ViewData["TagDesc"], "TagNo", "TagDesc").Width(150);
08.    columns.ForeignKey(p => p.Plant, (System.Collections.IEnumerable)ViewData["Plant"], "ItemValue", "ItemName").Width(70);
09.    columns.Group(group => group
10.    .Title("管制值").HeaderHtmlAttributes(new { @style = "text-align: center" })
11.        .Columns(info =>
12.        {
13.            info.Bound(p => p.LowerLimit).Width(75);
14.            info.Bound(p => p.Standard).Width(90);
15.            info.Bound(p => p.UpperLimit).Width(75);
16.        })
17.    );
18.    columns.Bound(p => p.PLC_Data).Width(80);
19.    columns.Group(group => group
20.    .Title("檢測值").HeaderHtmlAttributes(new { @style = "text-align: center" })
21.    .Columns(info =>
22.    {
23.        info.Bound(p => p.Result_1).Width(75);
24.        info.Bound(p => p.Result_2).Width(75);
25.        info.Bound(p => p.Result_3).Width(75);
26.    })
27.    );
28.    columns.Bound(p => p.isPermitted).Width(80);
29.    columns.Bound(p => p.Notification).Width(120);
30.    columns.Bound(p => p.Description).Width(120);
31.    columns.Bound(p => p.Inspector).Width(120);
32.    columns.Bound(p => p.TestTime).Width(180).ClientTemplate("#= kendo.toString(kendo.parseDate(TestTime), 'G')#");
33.    columns.Bound(p => p.CreateTime).Width(180).ClientTemplate("#= kendo.toString(new Date(parseInt(CreateTime.substr(6))),'yyyy/MM/dd HH:mm:ss')#");
34. })
35..ToolBar(toolbar =>
36.{
37.    //toolbar.Create().Text("新增");
38.    //toolbar.Excel().Text("匯出Excel");
39.    toolbar.Save().SaveText("儲存").CancelText("取消");
40.    //toolbar.Save();
41.})
42..Editable(editable => editable.Mode(GridEditMode.InCell))
43..Pageable(pager => pager.Input(true).Numeric(true).Info(true).PreviousNext(true).Refresh(true).PageSizes(true))
44..Sortable(sortable => sortable.AllowUnsort(true).SortMode(GridSortMode.MultipleColumn))
45.//.Selectable(selectable => selectable.Mode(GridSelectionMode.Single).Type(GridSelectionType.Cell))
46..Scrollable()
47..Navigatable()
48..AutoBind(false)
49..Reorderable(reorder => reorder.Columns(true))
50..Resizable(resize => resize.Columns(true))
51..Excel(excel => excel.FileName(ViewBag.Title + ".xlsx"))
52..HtmlAttributes(new { style = "height:100%;width:100%" })
53..Events(events => events.Edit("edit").Save("save").DataBound("dataBound"))
54..DataSource(dataSource => dataSource
55.    .Ajax()
56.    .Batch(true)
57.    .ServerOperation(false)
58.    .PageSize(10)
59.    .Events(events => events.Error("error_handler").RequestEnd("onRequestEnd"))
60.    .Model(model =>
61.    {
62.        model.Id(p => p.TestId);
63.    })
64.    .Create(Create => Create.Action("ChemicalTestResult_Create", "ChemicalTestResult"))
65.    .Update(Update => Update.Action("ChemicalTestResult_Update", "ChemicalTestResult"))
66.    )
67.)

 

01.using Kendo.Mvc.Extensions;
02.using Kendo.Mvc.UI;
03.using LIMS.Controllers;
04.using Newtonsoft.Json;
05.using System;
06.using System.Collections.Generic;
07.using System.Linq;
08.using System.Web;
09.using System.Web.Mvc;
10.using System.Web.Script.Serialization;
11.using System.Xml.Linq;
12.using Template.Areas.TestResult.Models;
13. 
14.namespace Template.Areas.TestResult.Controllers
15.{   
16.    public class ChemicalTestResultController : BaseApiController
17.    {
18.        // GET: TestResult/ChemicalTest
19.        [Authorize]
20.        public ActionResult Index()
21.        {
22.            try
23.            {
24.                ItemList();
25.                return View();
26.            }
27.            catch (Exception ex)
28.            {
29.                logger.Error(ex, "ChemicalTestResultController");
30.                return new JavaScriptResult { Script = "alert('" + ex.ToString() + "');" };
31.            }
32.        }
33. 
34.        [AcceptVerbs(HttpVerbs.Get)]
35.        public JsonResult ChemicalTestResult_Read(string s)
36.        {
37.            try
38.            {
39.                var a = db.LIMS_Chemical_TestResult.Where(o => s.Contains(o.TestId) && (o.Result_1 == null || o.Result_2 == null || o.Result_3 == null) && (o.isPermitted == "不合格" || o.isPermitted == null)).ToList();               
40.                JavaScriptSerializer serializer = new JavaScriptSerializer();
41.                return Json(a, JsonRequestBehavior.AllowGet);
42.            }
43.            catch (Exception ex)
44.            {
45.                logger.Error(ex, "ChemicalTestResultController");
46.                throw;
47.            }
48.        }
49. 
50.        [AcceptVerbs(HttpVerbs.Post)]
51.        public ActionResult ChemicalTestResult_Update([DataSourceRequest] DataSourceRequest request, [Bind(Prefix = "models")]IEnumerable<LIMS_Chemical_TestResult> o)
52.        {
53.            try
54.            {
55.                foreach (var a in o)
56.                {
57.                    a.Inspector = User.Identity.Name;
58.                    a.TestTime = DateTime.Now;
59.                    db.Entry(a).State = System.Data.Entity.EntityState.Modified;
60.                    var b = db.LIMS_Chemical_TestResult.Where(p => p.TestId == a.TestId).Select(p => p.CreateTime).ToList();
61.                    a.CreateTime = b.ElementAt(0).ToUniversalTime();
62.                    db.SaveChanges();
63.                    logger.Trace("{0}修改一筆檢驗資料,檢驗編號:{1}。", User.Identity.Name, a.TestId);
64.                }
65. 
66.                return Json(o.ToDataSourceResult(request, ModelState));
67.            }
68.            catch (Exception ex)
69.            {
70.                logger.Error(ex, "ChemicalTestResultController");
71.                return new JavaScriptResult { Script = "alert('" + ex.ToString() + "');" };
72.            }
73.        }
74.    }
75.}
0
Jalen
Top achievements
Rank 1
answered on 28 Dec 2016, 09:13 AM

Here is Json :

[{"TestId":"1612220001-01","TestNo":"Cl-","TestEqp":"APT","TagNo":"1/2/4AL","Plant":"CF1","Class":"SB","UpperLimit":12,"Standard":11,"LowerLimit":10,"PLC_Data":null,"Result_1":1,"Result_2":null,"Result_3":null,"isPermitted":"不合格","isQualified":false,"Description":null,"Notification":null,"Inspector":"N000157994","TestTime":"/Date(1482909163000)/","CreateTime":"/Date(1482319378000)/"}]

0
Jalen
Top achievements
Rank 1
answered on 28 Dec 2016, 09:13 AM

Here is Json :

[{"TestId":"1612220001-01","TestNo":"Cl-","TestEqp":"APT","TagNo":"1/2/4AL","Plant":"CF1","Class":"SB","UpperLimit":12,"Standard":11,"LowerLimit":10,"PLC_Data":null,"Result_1":1,"Result_2":null,"Result_3":null,"isPermitted":"不合格","isQualified":false,"Description":null,"Notification":null,"Inspector":"N000157994","TestTime":"/Date(1482909163000)/","CreateTime":"/Date(1482319378000)/"}]

0
Accepted
Alexander Popov
Telerik team
answered on 30 Dec 2016, 09:52 AM
Hello,

I reviewed the provided code snippets and noticed that number and date columns get their value by parsing the incoming data. This should not be necessary with a properly configured setup, since the DataSource uses the Model's field types to do the parsing automatically. However, I've also noticed that the DataSource's data method is used, which expects already parsed data and any parameters passed to it will not go through the DataSource's schema and would not be automatically parsed. My advice is to either convert all fields to their actual data type prior to passing them to the data method, or avoid using that method altogether.

Regards,
Alexander Popov
Telerik by Progress
Try our brand new, jQuery-free Angular 2 components built from ground-up which deliver the business app essential building blocks - a grid component, data visualization (charts) and form elements.
Tags
Grid
Asked by
Jalen
Top achievements
Rank 1
Answers by
Alexander Popov
Telerik team
Jalen
Top achievements
Rank 1
Share this question
or