首页 文章

如何在kendo网格中从ajax呈现数据时显示微调器

提问于
浏览
2

我的应用程序中有一些查询搜索过滤器 . 从过滤器我想将json结果呈现为一个kendo网格 . 出于这个原因,我不使用网格的默认 DataSource.Read() ,而是使用Ajax请求,我将结果绑定到网格,如下所示:

剑道网格:

@(Html.Kendo().Grid<List<SearchSpecialtiesResult>>()
    .Name("grid")
    .Columns(columns =>
    {
        columns.Bound(c => c.Id).Hidden();
        columns.Bound(c => c.Code).Width(100);
        // Some other columns
    })
     //Some events and filtering options
    .DataSource(dataSource => dataSource
        .Ajax()
        .ServerOperation(false)
        .Model(model =>
        {
            model.Id(p => p.Id);
            // other model values
        })
        )
)

在Ajax上设置dataSource成功

var datasource = new kendo.data.DataSource({ data: resultData });
$("#grid").data("kendoGrid").setDataSource(datasource);

绑定发生正确然而我使用的其他地方 DataSource.Read() 网格显示加载效果,我找不到如何重现到我的页面,我使用这个地方我们用于Ajax请求的一些其他加载效果 . 有没有办法在我的情况下重现它?

2 回答

  • 3

    你在找 kendo.ui.progress . 单击here获取Telerik的文档 .

    在运行ajax调用之前,添加以下内容以显示加载效果:

    kendo.ui.progress($("#gridName"), true);
    

    成功或失败后,添加以下内容以删除加载效果:

    kendo.ui.progress($("#gridName"), false);
    
  • 2

    我的申请也有这样的案例 . 我处理它们的方式也是通过kendo.ui.progress($("#gridDame"),true) . 为了完成答案,我将通过将过滤器输入值作为附加数据传递给我的Read请求来发布我处理它们的方式以及我现在使用网格 DataSource.Read() 处理它们的方式 .

    First way:

    我对所有gridRequests都进行了一般的Ajax调用

    function getGridData(uri, payload, gridName) {
        return $.ajax({
            url: uri,
            type: "POST",
            contentType: "application/json",
            data: payload,
            beforeSend: function () {
                window.kendo.ui.progress($("#"+ gridName), true);
            }
        }).done(function (result) {
            return result;
        }).always(function () {
            window.kendo.ui.progress($("#" + gridName), false);
        });
    }
    

    我用我的搜索表单的参数点击了我的按钮

    $("#searchFormBtn").bind("click", function (e) {
            e.preventDefault();
    
            // ... Get the filter input values and strignify them as json ...
    
            return getGridData(url, filterInputValuesStrignifiedAsJson, "grid")
                .done(function (result) {
                    if (result.success) {
                        var datasource = new kendo.data.DataSource({ data: result.data });
                        $("#grid").data("kendoGrid").setDataSource(datasource);
                    } else {
                        //Handle error
                    }
                });
        });
    

    Second way:

    我像这样设置我的 Datasource.Read()

    .Read(read => read.Action("ActionName", "ControllerName").Data("getFilterInputValues"))
    

    并且总是Autobind(false)为了不在第一次加载时读取

    在函数getFilterInputValues中,我得到了我的搜索表单值:

    function searchModelData() {
        return {
            DateFrom: $("#DateFrom").data("kendoDatePicker").value(),
            DateTo: $("#DateTo").data("kendoDatePicker").value(),
            Forever: document.getElementById("datesForever").checked === true ? true : false,
            SearchCommunicationType: { Id: $("#SearchCommunicationType_Id").val() },
            SearchBranch: { Id: $("#SearchBranch_Id").val() },
            CompletedById: { Id: $("#CompletedById_Id").val() },
            SearchOperationType: { Id: $("#SearchOperationType_Id").val() },
            AcademicPeriodSearch: { Id: $("#AcademicPeriodSearch_Id").val() },
            AcademicYearSearch: $("#AcademicYearSearch").val(),
            Name: $("#Name").val(),
            ContactValue: $("#ContactValue").val(),
            AddressValue: $("#AddressValue").val()
        };
    }
    

    最后,我在单击按钮时触发网格的DataSource.Read()

    $("#searchFormBtn").bind("click", function () {
            var grid = $('#grid').data("kendoGrid");
    
            if (grid.dataSource.page() !== 1) {
                grid.dataSource.page(1);
            }
            grid.dataSource.read();
        });
    

    使用 Datasource.Read() 显然可以正常工作,并在您的问题中提到旋转效果 .

相关问题