Получить счетчик записей в сетке Kendo после dataSource.read - программирование
Подтвердить что ты не робот

Получить счетчик записей в сетке Kendo после dataSource.read

Я хочу, чтобы иметь возможность нажимать счетчик записей из моей сетки Kendo после чтения (обновления).

Вот моя сетка Кендо:

    @(Html.Kendo().Grid(Model)
      .Name("SearchWindowGrid")
      .Columns(columns =>
          {
              columns.Bound(p => p.SYSTEM_ITEMS_SEGMENT1).Hidden();
          })
      .ClientRowTemplate(
          "<tr>" +
            "<td>" +
                "<span><b>#: SYSTEM_ITEMS_SEGMENT1#</b></span>&nbsp;<br/>" +
                "<span>#: DESCRIPTION# </span>" +
            "</td>" +
          "</tr>"
      )
      .DataSource(dataSource => dataSource
        .Ajax()
        .Read(read => read.Action("PopulateSearchWindow", "Item").Data("additionalSearchWindowInfo"))
        .Events(ev => ev.Error("onErrorSearchWindow"))
      )
      .Selectable(s => s.Enabled(true).Mode(GridSelectionMode.Single).Type(GridSelectionType.Row))
      .Scrollable(s => s.Enabled(true).Height(450))
  )

Действие My Controller:

    public ActionResult PopulateSearchWindow([DataSourceRequest] DataSourceRequest request, string option, string searchText, string searchDesc)
    {
        try
        {
            var derps= _idg.SearchItems(searchText, searchDesc, _adg.OrganizationCode).ToList();

            return Json(derps.ToDataSourceResult(request, ModelState));
        }
        catch (Exception e)
        {
            ModelState.AddModelError("ExceptionErrors", e.Message);
            return Json(new List<Derp>().ToDataSourceResult(request, ModelState));
        }
    }

Вот моя функция, которая заставляет обновлять данные:

    function refreshData(){
        $("#SearchWindowGrid").data("kendoGrid").dataSource.read();
        //TODO: get the total count and push to #countElement
        var count = $("#SearchWindowGrid").data("kendoGrid").length; //not sure what to do here
        $("#countElement").val(count);
    }

Где я помещаю свой TODO в функцию jQuery, я хочу иметь возможность получить количество строк и нажимать это число на определенный элемент на моей странице.

4b9b3361

Ответ 1

В соответствии с API Reference здесь

dataSource имеет функцию total(). Поэтому теоретически вы должны иметь возможность сделать следующее:

function refreshData(){
        var grid = $("#SearchWindowGrid").data("kendoGrid");
        grid.dataSource.read();
        var count = grid.dataSource.total();
        $("#countElement").val(count);
    }

Ответ 2

Я обнаружил, что когда вы запрашиваете .total() после функции .read(), сетка не будет действительно обновлена, даже если вы вызываете .refresh() сразу после функции read. Определив событие изменения, следующее получило бы общее более элегантное и точное:

@(Html.Kendo().Grid(Model)
  .Name("SearchWindowGrid")
  ...      
 .DataSource(dataSource => dataSource
    .Ajax()
    .Read(read => read.Action("PopulateSearchWindow", "Item").Data("additionalSearchWindowInfo"))
    .Events(ev => ev.Error("onErrorSearchWindow").Change("OnGridChange"))
  )
)

со следующими скриптами:

function refreshData(){
    var grid = $("#SearchWindowGrid").data("kendoGrid");
    grid.dataSource.read();
    grid.refresh();
}

function OnGridChange() {
    var grid = $("#SearchWindowGrid").data("kendoGrid");
    var count = grid.dataSource.total();
    $("#countElement").val(count);
}

Ответ 3

Код gardarvalur отлично работает:

 var gridElements = $("#MyGri").data("kendoGrid").dataSource;
 gridElements.fetch(function ()
 {var total = gridElements.total(); })