我正在为我的项目使用DevExtreme。我已经用所需的数据进行了数据网格渲染,现在我需要为用户添加选择单个行的功能,以便他们可以通过下拉菜单/选择框进行批量更改。
我面临的问题是让我选择的列根据下拉菜单中的选择值来更新其值。
这是我到目前为止所拥有的:
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();
}
当我触发此代码片段时,我可以正确获取返回的行索引以及在控制台中显示的所选值。但是,数据网格中的值保持不变,日志中也不会出现任何消息。
我尝试将其与硬编码值(您可以在第二条if语句后看到注释)一起使用,并在其之前添加this
,但这会产生以下错误:
Uncaught TypeError: Cannot read property 'cellValue' of undefined
为了使我的datagrid单元正确更新其值,我需要更改什么?
还有我的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*@