Как удалить строку в Dojo EnhancedGrid, используя индекс строки, не используя выделение

Попытка найти ответ для удаления строки для 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;
}

Вот мой вопрос: каждая строка будет иметь кнопку удаления в конце. При нажатии этой кнопки эта же строка должна быть удалена.

Кто-нибудь может сказать мне, как удалить строку на основе индекса строки?

2 ответа

Решение

Вот решение. Последовательность методов, которые будут запускаться при нажатии кнопки 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;
            }
        });
    }
});

Если вы хотите добавить (удалить) данные программно, вам просто нужно добавить (удалить) их из основного хранилища данных. Поскольку DataGrid является "DataStoreAware", изменения, внесенные в хранилище, будут автоматически отражены в 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

Надеюсь, это поможет.

Другие вопросы по тегам