it-swarm.com.de

Erhalte die Anzahl der Datensätze in Kendo Grid nach dataSource.read

Ich möchte in der Lage sein, die Anzahl der Datensätze aus meinem Kendo-Raster nach dem Lesen (Aktualisieren) zu übertragen.

Hier ist mein Kendo-Gitter:

    @(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))
  )

Meine Controller-Aktion:

    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));
        }
    }

Hier ist meine Funktion, die die Datenaktualisierung erzwingt:

    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);
    }

Wo ich mein TODO in die jQuery-Funktion stecke, möchte ich die Anzahl der Zeilen erhalten und diese Zahl in ein bestimmtes Element auf meiner Seite verschieben.

17
gardarvalur

Gemäß der API-Referenz hier

die DataSource hat eine total () - Funktion. Sie sollten also theoretisch folgendes tun können:

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

Ich habe festgestellt, dass, wenn Sie die .total () - Funktion nach einer .read () - Funktion anfordern, das Raster nicht wirklich aktualisiert wird, selbst wenn Sie .refresh () direkt nach der Read-Funktion aufrufen. Durch das Definieren eines Änderungsereignisses würde das Folgende eleganter und genauer werden:

@(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"))
  )
)

mit folgenden Skripten:

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);
}
11
Shadi

Der gardarvalur code funktioniert auch gut:

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