如何使用行索引而不是使用选择来删除 dojo EnhancedGrid 中的行

How to delete a row in dojo EnhancedGrid using row index not by using selection

正在尝试根据行索引找到删除 dojo EnhancedGrid 行的答案。

请找到 EnhancedGrid。

    var dataStore = new ObjectStore({objectStore: objectStoreMemory});
    // grid
    grid = new EnhancedGrid({
    selectable: true,
    store: dataStore,
    structure : [ {
        name : "Country",
        field : "Country",
        width : "150px",
        reorderable: false,
        editable : true
    }, {
        name : "Abbreviation",
        field : "Abbreviation",
        width : "120px",
        reorderable: false,
        editable : true
    }, {
        name : "Capital",
        field : "Capital",
        width : "100%",
        reorderable: false,
        editable : true
    }, {
        label: "", 
        field: "Delete",
        formatter: deleteButton
    }],
    rowSelector: '20px',
    plugins: {
        pagination: {
            pageSizes: ["10", "25", "50", "100"],
            description: true,
            sizeSwitch: true,
            pageStepper: true,
            gotoButton: true,
            maxPageStep: 5,
            position: "bottom"
        }
    }
    }, "grid");
    grid.startup();

删除按钮脚本在这里:

function deleteButton(id) {
    var dBtn1 = "<div data-dojo-type='dijit/form/Button'>";
    var dBtn2 = "<img src='delete.png' onclick='javascript:removeItem()' alt='" + id + "'";
    dBtn = dBtn1 + dBtn2 + " width='18' height='18'></div>";
    return dBtn;
}

这是我的问题:每行末尾都有一个删除按钮,单击此按钮应删除同一行。

谁能告诉我如何根据行索引删除行?

If you want to add (remove) data programmatically, you just have to add (remove) it from the underlying data store. Since DataGrid is “DataStoreAware”, changes made to the store will be reflected automatically in the DataGrid.

https://dojotoolkit.org/reference-guide/1.10/dojox/grid/example_Adding_and_deleting_data.html

dojox/grid 有一个 属性 selection 和方法 getSelected() 来获取选定的项目。在文档中的示例中,它是通过以下方式实现的:

        var items = grid5.selection.getSelected();
        if(items.length){
            // Iterate through the list of selected items.
            // The current item is available in the variable
            // "selectedItem" within the following function:
            dojo.forEach(items, function(selectedItem){
                if(selectedItem !== null){
                    // Delete the item from the data store:
                    store3.deleteItem(selectedItem);
                } // end if
            }); // end forEach
        } // end if

希望对您有所帮助。

这是解决方案。 运行 onClick 按钮的方法序列是 removeItem() 和 onRowClick 事件

1> 设置 "deleteButtonFlag" 点击按钮。

function removeItem() {
        deleteButtonGFlag = true;
}

2> 删除项目

dojo.connect(grid, "onRowClick", function(e) {
    if (deleteButtonGFlag) {
        dataStore.fetch({
            query: {},
            onComplete: function(items) {
                var item = items[e.rowIndex];
                dataStore.deleteItem(item);
                dataStore.save();
                deleteButtonGFlag = false;
            }
        });
    }
});