How can I refresh the grid after I edit the Kendo UI grid?

后端 未结 11 1765
忘掉有多难
忘掉有多难 2021-02-01 15:09

I edit the grid using editable: \"popup\" as shown on Telerik\'s demo page. After I edit the grid, I want the grid to refresh. Does the grid have any event that is

11条回答
  •  梦毁少年i
    2021-02-01 15:44

    I've been trying to figure out how to refresh the grid after creating a new item. Scenario is: Create an item in the client, send request to server, receive response and update client. (Alternatively, I wouldn't mind figuring out why the grid isn't using the item I'm returning it in the server-side create function)

    This post mentions the requestEnd event, but it's not exposed in razor. This event seems to fire after a request is finished, that is, after the server processes the event, so new objects created on the client will already be sent to the server for processing; then the client can request the latest information without losing data. Since the grid datasource object was undefined on page load, I ended up using the .Change event to hook the requestEnd event.

    @(Html.Kendo().Grid
    .Name("user-grid")
    ...
    .Pageable(pageable => pageable
        ...
        .Events( e => e.Remove("grid_remove").Change("hook_request_end"))
    .DataSource(dataSource => dataSource
        .Ajax()
        .PageSize(20)
        .Model(m =>
        {
            m.Id(vm => vm.DocumentId);
            m.Field("LastModified").Editable(false);
        })
        .Read(a => a.Action("KList", "Controller"))
        .Create(a => a.Action("KCreate", "Controller"))
        .Update(a => a.Action("KUpdate", "Controller"))
    )
    

    and then the javascript:

    var requestEndHooked = false;
    function hook_request_end()
    {
        if (requestEndHooked == true)
        {
            return;
        }
    
        requestEndHooked = true;
        $("#user-grid").data("kendoGrid").dataSource.bind("requestEnd", dataSource_requestEnd);
    }
    
    function dataSource_requestEnd(e)
    {
        try
        {
            if (e.type == "create")
            {
                $("#user-grid").data("kendoGrid").dataSource.read();
            }
    
        }
        catch (e)
        {
        }
    }
    

    If there's a better way, I'd love to know.

    To answer your question, there are events other than "create": "read", "update"

提交回复
热议问题