簡體   English   中英

更新Telerik Kendo Grid(MVC)后刷新

[英]Refresh after update Telerik Kendo Grid (MVC)

我有一個帶有一些環境數據的Kendo Grid。 網格的一個字段是“isDefault”,它接收1或0(對於真或假)。 在數據庫中,我有一個觸發器,當某個記錄設置為isDefault = 1時,任何其他記錄都更新為isDefault = 0,只是為了確保只有一個默認環境。

Kendo網格工作正常,它綁定數據並更新記錄就好了但是在更新之后,網格沒有刷新所有記錄,如果有,比方說,記錄1,isDefault = 1,我更新記錄4到isDefault = 1觸發器被觸發並將所有其他記錄更新為isDefault = 0但網格仍然顯示記錄1,isDefault = 1,現在記錄4,isDefault = 1

這是我視圖中的代碼:

Html.Kendo().Grid<Models.Environment>()
                   .Name("environmentGrid")
                   .Sortable()
                   .ToolBar(tb =>  tb.Create())
                   .Editable(editable => editable.Mode(GridEditMode.PopUp))
                   .Columns(cols =>
                   {
                       cols.Bound(c => c.Name).Width(150).Sortable(true);
                       cols.Bound(c => c.ConnectionString).Width(150).Sortable(true);
                       cols.Bound(c => c.Template).Width(150).Sortable(true);
                       cols.Bound(c => c.isDefault).Width(150).Sortable(true);
                       cols.Bound(c => c.StatusID).Width(150).Sortable(true);
                       cols.Command(command => { command.Edit();}).Width(60);
                   })
                   .DataSource(ds => ds
                       .Ajax()
                       .Model(model => 
                       { 
                           model.Id(m => m.EnvironmentID);
                       })
                       .Read(r => r.Action("GetEnvironments", "Admin"))
                       .Update(update => update.Action("UpdateEnvironments", "Admin"))
                       .Create(update => update.Action("UpdateEnvironments", "Admin"))                           
                   )

這是我的控制器上的代碼:

[AcceptVerbs(HttpVerbs.Post)]
    public ActionResult UpdateEnvironments([DataSourceRequest] DataSourceRequest dsRequest, Environment environment)
    {
        environment.ModifiedBy = userName;

        if (environment != null && ModelState.IsValid)
        {
            if (environment.EnvironmentID != 0)
            {
                var toUpdate = xgr.EnviromentRepository.ListAll().FirstOrDefault(p => p.EnvironmentID == environment.EnvironmentID);
                TryUpdateModel(toUpdate);
            }
            xgr.EnviromentRepository.Save(environment);
        }
        return Json(ModelState.ToDataSourceResult());
    }

提前感謝您的回答。

我終於開始工作了。 添加了事件處理程序:

Html.Kendo().Grid<Models.Environment>()
                   .Name("environmentGrid")
                   .Sortable()
                   .ToolBar(tb =>  tb.Create())
                   .Editable(editable => editable.Mode(GridEditMode.PopUp))
                   .Columns(cols =>
                   {
                       cols.Bound(c => c.Name).Width(150).Sortable(true);
                       cols.Bound(c => c.ConnectionString).Width(150).Sortable(true);
                       cols.Bound(c => c.Template).Width(150).Sortable(true);
                       cols.Bound(c => c.isDefault).Width(150).Sortable(true);
                       cols.Bound(c => c.StatusID).Width(150).Sortable(true);
                       cols.Command(command => { command.Edit();}).Width(60);
                   })
                   .DataSource(ds => ds
                       .Ajax()
                       .Model(model => 
                       { 
                           model.Id(m => m.EnvironmentID);
                       })
                       .Events(events =>
                              {
                                    events.RequestEnd("onRequestEnd"); //I've added this
                              })
                           .Read(r => r.Action("GetEnvironments", "Admin"))
                           .Update(update => update.Action("UpdateEnvironments", "Admin"))
                           .Create(update => update.Action("UpdateEnvironments", "Admin"))                           
                       )

和一個Javascript函數:

function onRequestEnd(e) {
        if (e.type == "update") {
            $("#environmentGrid").data("kendoGrid").dataSource.read();
        }
    }

另外,我需要修改EnvironmentRepository上的ListAll()方法,如下所示:

 public List<XML_Environment> ListAll()
    {
        _dataContext = new XMLGenEntitiesDataContext(); //I've to add this line. so the context is instantiated every time I call the ListAll Method.
        return _dataContext.XML_Environments.OrderBy<XML_Environment, string>(c => c.EnvironmentName).ToList<XML_Environment>();
    }

你正在返回錯誤的對象。 我真的不知道你是如何得到你的數據的,因為你沒有發布GET控制器,所以我將嘗試猜測它。 更新數據后,需要將它們發送回網格。 ModelState不包含您想要的數據。 嘗試這個:

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult UpdateEnvironments([DataSourceRequest] DataSourceRequest dsRequest, Environment environment)
{
    environment.ModifiedBy = userName;

    var updatedRecords = null;//1

    if (environment != null && ModelState.IsValid)
    {
        if (environment.EnvironmentID != 0)
        {
            var toUpdate = xgr.EnviromentRepository.ListAll().FirstOrDefault(p => p.EnvironmentID == environment.EnvironmentID);
            TryUpdateModel(toUpdate);

            updatedRecords = xgr.EnviromentRepository.ListAll();//2 -- you might need to add "ToList()", depending on your implementation
        }
        xgr.EnviromentRepository.Save(environment);
    }
    return Json(updatedRecords.ToDataSourceResult(request, ModelState));//3
}

請參閱此鏈接以獲取完整示例。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM