DevExtreme setCellValue работает не так, как предполагалось

#javascript #devexpress #devextreme

#javascript #devexpress #devextreme

Вопрос:

Я использую DevExtreme для своего проекта. У меня есть рендеринг datagrid с нужными данными, и теперь мне нужно добавить возможность пользователям выбирать отдельные строки, чтобы они могли вносить массовые изменения через выпадающее меню / поле выбора.

Проблема, с которой я сталкиваюсь, заключается в том, что выбранный мной столбец обновляет свое значение на основе выбранного значения из выпадающего меню.

Это то, что у меня есть до сих пор:

 function cboApprovedSelectAll_Changed(data) {
    // get datagrid
    var grid = $("#grid-container").dxDataGrid("instance");

// get selected box value
var selectedValue = data.value;

if (selectedValue == null)
    return;

if (confirm('Do you want to set ALL approval status to '   (selectedValue == "Approved" ? "Approved" : "Declined")   "?")) {
    var indicies = grid.getSelectedRowKeys();

    //this.grid.cellValue(19079, "ApprovalStatus", "rawr");

    for (var counter = 0; counter < indicies.length; counter  ) {
        console.log(indicies[counter]); // returns a value
        console.log(selectedValue);     // returns the correctly selected value

        // set selected rows cell value to that of the drop down 
        grid.cellValue(indicies[counter], "ApprovalStatus", selectedValue);
    }
}
grid.saveEditData();
  

}

Когда я запускаю этот фрагмент кода, я могу корректно возвращать индекс строк, а также выбранное значение, отображаемое в консоли. Тем не менее, значение в datagrid остается неизменным, и из журнала также не поступает сообщение.

Я пытался использовать это с жестко закодированными значениями (которые, как вы можете видеть, закомментированы после второго оператора if) и добавлять this перед ним, но это порождает следующую ошибку:

 Uncaught TypeError: Cannot read property 'cellValue' of undefined
  

Что мне нужно изменить, чтобы моя ячейка datagrid правильно обновила свое значение?

И моя таблица данных со столбцом ниже:

 @(Html.DevExtreme().DataGrid()
        .ID("grid-container")
                .DataSource(ds => ds
                .WebApi()
                .Controller("sample")
                .UpdateAction("update")
                .LoadAction("load")
                .Key("Id")

                ) // end of datasource
                .Columns(columns =>
                {
                    columns.Add().DataField("ApprovalStatus").AllowEditing(false);
                })
                .Paging(paging => paging.PageSize(10))
                .Pager(pager =>
                {
                    pager.ShowPageSizeSelector(true);
                    pager.AllowedPageSizes(new List<int> { 5, 10, 20 });
                    pager.ShowInfo(true);
                })
                .FilterRow(f => f.Visible(true))
                .HeaderFilter(f => f.Visible(true))
                .GroupPanel(p => p.Visible(true))
                .ShowBorders(true)
                .ShowRowLines(true)
                .ColumnAutoWidth(true)
                .SearchPanel(sp => sp.Visible(true))
                .Selection(s => s.Mode(SelectionMode.Multiple))


) @*end of data grid*@
  

Комментарии:

1. является ApprovalStatus dataField ? Значение, является ApprovalStatus идентификатором столбца ? обычно, чтобы обновить данные сетки, достаточно вызвать saveEditData() после изменения данных. Если сетка не обновляется, вы, вероятно, предоставляете методу cellValue неправильные данные. Не могли бы вы, пожалуйста, привести проверяемый пример? Здесь было бы полезно поделиться dxDataGrid конфигурацией.

2. @briosheje обновил мой вопрос с помощью datagrid. Я не могу / не буду предоставлять логику загрузки для datagrid, но эта часть работает.

3. Какой тип ApprovalStatus ? объект?