【问题标题】:How to keep current checkbox state when paging on the grid在网格上分页时如何保持当前复选框状态
【发布时间】:2017-10-24 23:56:33
【问题描述】:

我有加载数据的剑道网格。每列都有复选框,用户可以在其中选择和下载。现在的问题是,如果我检查第 1 页上的几行,然后移至第 2 页进行选择。当我回到第 1 页时,所有选中的复选框都将被取消选中。

我也试过这个Make Selection with Checkbox ColumnExample

如何在分页时保持复选框状态?

我试过了,没有运气,

剑道

 <fieldset class="fieldsetStyle" id="form">
     <div class="box-body">
         <div id="divMain" class="col-md-13">
              <div class="form-group">
            @(Html.Kendo().Grid<myModel>()

.Name("Grid")
.ToolBar(toolbar =>
{
toolbar.Template(@<text>
<div class="toolbar">
    <button class="btn btn-primary" id="showSelection1" 
            onclick="goToFunctionController()" name="submit" type="submit">Download Selected 
            Orders</button>
    </div>
</text>);
})
.Columns(columns =>
{
columns.Bound(x => x.ordernumber).Title("Order Number");
            columns.Bound(x => x.ordernumber).Template(@<text>
</text>).ClientTemplate("<input id='chkId' name'chkbox' type='checkbox' 
class='checkbox' onClick='' />").Title("")
                .Filterable(false).Sortable(false);

})
.Pageable(pageable => pageable
.Refresh(true)
.PageSizes(true)
.ButtonCount(5))
.Events(e => e.DataBound(@<text>function(e) {onDataBound()}</text>))

                  .Resizable(resize => resize.Columns(true))
                  .DataSource(dataSource => dataSource
                  .Ajax()
                  .PageSize(10)
                  .ServerOperation(false) //No post back
                  .Read(read => read.Action("ReadPoss", "ConsolidatedPOSS"))))
        </div>
    </div>
</div>

Javascript

  function onDataBound() {
  alert("Inside onDataBound !!!!");
  var  grid = $("#Grid").data("kendoGrid")
  var  datasource = grid.dataSource.view();

    for (var i = 0; i < datasource.length; i++) {
        if (SeletectOrders[datasource[i].ordernumber]) {
            this.tbody.find("tr[data-uid='" + datasource[i].uid + "']")
            .addClass("k-state-selected")
            .find(".checkbox")
            .attr("checked", "checked"); 
        }
    }
}

型号

public class myModel
{
  public string ordernumber { get; set; }
  public bool IsSelected { get; set; }
}

【问题讨论】:

  • 您还需要这方面的帮助吗?
  • 是的,我仍然需要帮助。对我所做的事情没有那么自信
  • 我正在为你努力,请稍等

标签: javascript asp.net-mvc checkbox kendo-grid


【解决方案1】:

您需要做的是在将支票选择到网格数据中后将其存储起来,有点像会话存储。好的,你去:

https://dojo.telerik.com/abEYO/2

<div id="grid"></div>
<script>
$("#grid").kendoGrid({
  columns: [
    { field: "ID" },
    { field: "Checkbox", type: "boolean", template: '<input type="checkbox" style="margin-left: 4px;" class="checkone" />', editable: "false"},
    { field: "RollUp" },
    { field: "age" }
  ],
  editable: false,
  pageable: {
    input: true,
    numeric: false,
    refresh: true,
    pageSizes: [ 5, 10, 20, "all"],
    pageSize: 5,
  },
  dataSource: [
      { ID: "1", Checkbox: "false", RollUp: "Jane Doe", age: 30 },
      { ID: "2", Checkbox: "false", RollUp: "John Doe", age: 33 },
      { ID: "3", Checkbox: "false", RollUp: "Jane Doe", age: 30 },
      { ID: "4", Checkbox: "false", RollUp: "John Doe", age: 33 },
      { ID: "5", Checkbox: "false", RollUp: "Jane Doe", age: 30 },
      { ID: "6", Checkbox: "false", RollUp: "John Doe", age: 33 },
      { ID: "7", Checkbox: "false", RollUp: "Jane Doe", age: 30 },
      { ID: "8", Checkbox: "false", RollUp: "John Doe", age: 33 },
  ],
  dataBound: function (e) {
    var gridDataView = $("#grid").data().kendoGrid.dataSource.view();
    for (var i = 0; i < gridDataView.length; i++) {
      var panelApplicationId = gridDataView[i].Checkbox;
      if (ShouldBeChecked(panelApplicationId)) {
        $('#grid tr td input').eq(i).prop("checked", true);
      }
    }
  }
});

$(document).on('click', 'input.checkone', function (e) {
    var checked = $(this).prop("checked");
    var gridDataView = $("#grid").data().kendoGrid.dataSource.view();
    console.log(gridDataView);
    var idx = $(this).closest("tr").find("td:nth-child(1)").text();
    var gridData = $("#grid").data().kendoGrid.dataSource.data();
    for(var i = 0; i < gridData.length; i++) {
      if (gridData[i].ID == idx) {
        gridData[i].Checkbox = checked;
        break;
      }
    }
});

  function ShouldBeChecked(panelApplicationId) {
    var shouldBeChecked = false;
    var gridData = $("#grid").data().kendoGrid.dataSource.data();
    for (var i = 0; i < gridData.length; i++) {
      if (gridData[i].Checkbox == panelApplicationId) {
        if (gridData[i].Checkbox) {
          shouldBeChecked = true;
        }
        break;
      }
    }
    return shouldBeChecked;
  }

如果您有任何问题,请告诉我。

【讨论】:

  • 非常感谢,我做了一些修改,效果更好。你帮了忙!
  • 很高兴我能帮上忙
  • 谢谢。请查看我今天的帖子,看看您是否可以提供帮助
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-13
  • 1970-01-01
  • 2013-09-06
相关资源
最近更新 更多