Kendo网格更新 - 任何行的更新点击显示第1行详细信息

时间:2014-05-29 16:32:57

标签: kendo-ui kendo-grid kendo-asp.net-mvc inline-editing

我正面临着Kendo网格内联编辑的问题,问题是即使我更新了任何行,第一行数据也会显示在网格中,对此有何帮助?

更新前

enter image description here

更新后。

enter image description here

有趣的是,我从控制器返回的对象确实有正确的数据

控制器代码

    [AcceptVerbs(HttpVerbs.Post)]
    [ValidateAntiForgeryToken]
    [ActionSessionState(System.Web.SessionState.SessionStateBehavior.Required)]
    [OutputCache(Duration = 0, VaryByParam = "none")]
    public ActionResult _SaveBatchEditingintegrate([DataSourceRequest] DataSourceRequest request)
    {
        var UPObj = SessionFacade.UserProfile as UserProfile;

        try
        {
            IntegrationRate objInteg = new IntegrationRate();
            TryUpdateModel(objInteg);
            if (objInteg.PeriodID != 0)
            {
                var Integrationrate = (from p in _draftManagecompany.IntegrationRates where p.PeriodID == objInteg.PeriodID select p).First();
                TryUpdateModel(Integrationrate);
                if (Integrationrate.Rate > 100) //set 100 as default
                {
                    Integrationrate.Rate = 100;
                }
            }
            LoadResourceJSArray();
        }
        catch (Exception ex)
        {
            // Adding related additional information along with exception object
            //ExceptionLogger.Log(ex, "Period ID", id);
            ExceptionLogger.Log(ex, "User Profile Info", UPObj);

            // Handle exception with BubbleExceptionPolicy
            if (exManager.HandleException(ex, "BubbleExceptionPolicy"))
                throw;  // Not to include the ex, as the previous stack trace to be maintained
        }
//_draftManagecompany.IntegrationRates contains updated value in the correct order
        return Json(_draftManagecompany.IntegrationRates.ToDataSourceResult(request));


    }

cshtml代码:

 @{ var integrateGrid = Html.Kendo()
            .Grid(Model.Company.IntegrationRates)
            .Name("Gridintegrate")
            .EnableCustomBinding(true) // Enable custom binding
            .BindTo(Model.Company.IntegrationRates)
            .Events(events =>
            {
                events.Change("DataBound_Integ");

            })
            .ToolBar(
                commands =>
                {
                    //commands.Insert().ButtonType(GridButtonType.BareImage).ImageHtmlAttributes(new { style = "visibility:hidden" });
                }
            )
            .Columns(columns =>
            {

                columns.Bound(p => p.PeriodID).Visible(false);
                columns.Bound(p => p.Month).Width(150);
                columns.Bound(p => p.Rate).Format("{0:0.00}%").Width(100);

                columns.Command(commands =>
                {
                    commands.Edit().HtmlAttributes(new { @id = "btn_IntRateEdit" });

                }).Width(150).Title(gridTitle);
            })
            .HtmlAttributes(new { style = "height: 380px;" })
            .Scrollable()
            .Editable(editable => editable.Mode(GridEditMode.InLine))
            .DataSource(dataSource => dataSource.Ajax()
                //.Batch(true) 
                .Read(read => read.Action("_AjaxBindingintegrate", "Company"))
                .Update(update => update.Action("_SaveBatchEditingintegrate", "Company"))

                .Model(model =>
                    {
                        model.Id(c => c.PeriodID);
                        model.Field(c => c.Month).Editable(false);
                    }

                )
                 .Events(events =>
                 {
                     events.Error("CheckSessionExistsOnTelerik");


                 })

            );
        //.Pageable(paging => paging.Style(GridPagerStyles.NextPreviousAndNumeric | GridPagerStyles.PageSizeDropDown).PageSize(20, new int[3] { 20, 50, 100 })).ToComponent();

        var culture = System.Globalization.CultureInfo.InvariantCulture;
        //integrateGrid.Localization = new GridControlLocalization(culture);
        integrateGrid.Render();


                    }

1 个答案:

答案 0 :(得分:1)

我想我在这里看到了问题。从完成更新后我可以看出,您将在更新时返回整个数据集,即6月,1月,2月等。

在更新中,您只需将已更新的项目返回到网格

因此,在您的示例中,将返回json更改为以下内容:

Return json(new { IntegrationRate}.toDataSourceResult(request,modelState),jsonbehaviour.allowget);

这应该解决你的问题。

因为您要返回整个数据集,所以它将第一行呈现为预期结果。

正如您所说,您在后台看到数据正确保存。所以你知道错误不会被抛出。