Dojo 如何在Dgrid selection mixin中获取选定行的列表

Dojo 如何在Dgrid selection mixin中获取选定行的列表,dojo,grid,dgrid,Dojo,Grid,Dgrid,我正在Dgrid ondemandgrid中使用选择器和选择混合。我正在使用复选框作为选择器。下面是我的问题 如何在html按钮单击时获取javascript中选中行的列表?我知道有dgrid选择和取消选择事件,但我想要按钮单击事件中所有选中行的列表 目前,如果我在任何位置单击一行,复选框都会被选中。但我只想在单击复选框时选择该行。如何实现这一点 这是我的密码 require([ "dgrid/OnDemandGrid", "dojo/s

我正在Dgrid ondemandgrid中使用选择器和选择混合。我正在使用复选框作为选择器。下面是我的问题

  • 如何在html按钮单击时获取javascript中选中行的列表?我知道有dgrid选择和取消选择事件,但我想要按钮单击事件中所有选中行的列表
  • 目前,如果我在任何位置单击一行,复选框都会被选中。但我只想在单击复选框时选择该行。如何实现这一点
  • 这是我的密码

                 require([
            "dgrid/OnDemandGrid",
            "dojo/store/JsonRest",
            "dojo/dom",
            "dojo/dom-style",
            "dojo/_base/declare",
            "dgrid/extensions/ColumnResizer",
            "dgrid/Selection", 
            "dgrid/selector"
        ], function (OnDemandGrid,JsonRest,dom,domStyle,declare,ColumnResizer,Selection, selector) {
                var Layout = [
                     selector({ label: selector({}), selectorType: "checkbox" }),
                     {field: 'srno',label: 'Sr No'},
                     {field: "Name",label: "name"}
                ];
                jsonstore = new JsonRest({target: url,idProperty: "srno"});
                grid = new(declare([OnDemandGrid,ColumnResizer,Selection]))({
                    store: jsonstore,
                    columns: Layout,
                    minRowsPerPage : 40,
                    maxRowsPerPage : 40,
                    keepScrollPosition : true,
                    allowSelectAll: true,
                    loadingMessage: "Loading data...",
                    noDataMessage: "No results found."
                }, "grid");
                domStyle.set(dom.byId("grid"),"height","210px");                
                grid.startup();
                grid.on("dgrid-select", function(event){
                        //
                });
                grid.on("dgrid-deselect", function(event){
                        //
                });
    
            });
    

    以下是您问题的解决方案:

        var Layout = [
                 selector({ label: '', sortable: false}),
                 {field: 'srno',label: 'Sr No'},
                 {field: "Name",label: "name"}
            ];
            jsonstore = new JsonRest({target: url,idProperty: "srno"});
            grid = new(declare([OnDemandGrid,ColumnResizer,Selection]))({
                store: jsonstore,
                columns: Layout,
                minRowsPerPage : 40,
                maxRowsPerPage : 40,
                selectionMode: "none",
                deselectOnRefresh: false,
                keepScrollPosition : true,
                allowSelectAll: true,
                loadingMessage: "Loading data...",
                noDataMessage: "No results found."
            }, "grid");
    
    
    
        new Button({
            label: "Ok",
            onClick: function () {
    
                 // here you can use grid.selection to get the list of selected rows.
                 // it is an object with { 'rowid': true} format  for example, like below 
                array.forEach(grid.store.data, function (item) {
                    if (grid.selection[item.id]) {
                        //your code to handle this selected item
                    }
                });
            })
        }, 'button');
    

    对于1:声明一个
    var选择=[]
    那么

    并将其拼接到dgrid取消选择上 然后单击按钮访问阵列

    对于2:使用
    selectionMode:“无”定义网格,

    从文档中:

    可以获取此处理程序中的选定行。 selectedRows变量为您提供网格中的所有选定项

       window.grid = new (declare([Grid, ColumnResizer, Selection]))({
                    store: jsonstore,
                    columns: Layout,
                    minRowsPerPage: 40,
                    maxRowsPerPage: 40,
                    keepScrollPosition: true,
                    allowSelectAll: true,
                    loadingMessage: "Loading data...",
                    noDataMessage: "No results found."
                }, "grid");
    
                window.grid.on("dgrid-select", function (event) {
    
    
                    var selectedRows = event.rows;
    
                });
    

    这不适用于json rest存储,因为它没有属性“.data”。json rest存储不一定从服务器下载了所有数据。需要仔细测试grid.selection数组(selected中的行)中是否存在数据,项目可以位于选择数组中,其值为false表示未选择该项目。还需要小心处理大型数据集,因为网格中的当前可视化表示可能不包含存储中的所有数据。此网格不是自动高度调整的,所以它将使用虚拟滚动,并且只渲染“视口”中的数据子集grid.selected数组仅包含已呈现行的选择状态(选择为true,未选择为false)。grid.isSelected(item)方法应用于测试是否选择了某个项目,此方法还考虑了列标题中尚未呈现项目的主复选框。带有代码的答案应说明代码的位置/用途(您更改了什么,如何使用它等)。对于取消选择的行===window.grid.on(“dgrid取消选择”,
    this.grid.on(".dgrid-row:dblclick", function(vet) {
        // your selected row
        var row = self.grid.row(vet);
    });
    
       window.grid = new (declare([Grid, ColumnResizer, Selection]))({
                    store: jsonstore,
                    columns: Layout,
                    minRowsPerPage: 40,
                    maxRowsPerPage: 40,
                    keepScrollPosition: true,
                    allowSelectAll: true,
                    loadingMessage: "Loading data...",
                    noDataMessage: "No results found."
                }, "grid");
    
                window.grid.on("dgrid-select", function (event) {
    
    
                    var selectedRows = event.rows;
    
                });