У меня ASP. NET MVC Сетка Кендо настроена как
@(Kendo.Grid<MyGridModel>()
.Name("myGrid")
.Columns(col =>
{
col.Bound(o => o.AccountID)
.ClientTemplate("<input class = 'checkbox-selectrow' type='checkbox' value='#=AccountID#'/><label></label>")
.HeaderTemplate("<input class = 'checkbox-selectallrows' type='checkbox' id='selectAll'/><label></label>")
.Filterable(false)
.Width(40);
.Locked(true).Lockable(false);
col.Bound(o => o.State).Width(75).Filterable(ftb => ftb.Multi(true));
col.Bound(o => o.AccountName).Width(250).ClientTemplate("#=accountTemplate(data)#").Filterable(ftb => ftb.Multi(true));
col.Bound(o => o.AccountNumber).Width(150).Filterable(false);
col.Bound(o => o.Amount).Width(150).Filterable(false);
})
.AutoBind(false)
.Pageable(x => x.PageSizes(UIConstants.PageSizesProcessingGrids))
.Sortable(x => x.AllowUnsort(false))
.Resizable(resizing => resizing.Columns(true))
.Reorderable(reorder => reorder.Columns(true))
.Scrollable(s => s.Height("Auto"))
.DataSource(dataSource => dataSource
.Ajax()
.PageSize(UIConstants.DefaultPageProcessingGrid)
.Read(read => read
.Action("GetData", "MyController"))
.ServerOperation(false))
.Filterable()
)
Некоторые столбцы поддерживают множественную фильтрацию, а некоторые - не фильтруемые. Первый столбец имеет флажок в заголовке и в каждой строке, а также первый столбец locked
У меня есть кнопка на странице. Когда пользователь нажимает кнопку, я заполняю сетку.
$("#btn")click(function(){
var dataSource = kendoGrid.dataSource;
dataSource.transport.options.read.data = getData();
datasource.read();
})
Когда сетка загружается в первый раз, и пользователь нажимает на фильтр столбца, меню фильтра отображает все элементы меню правильно. Однако, когда пользователь снова нажимает кнопку поиска и сетка загружается с новыми данными, элементы меню фильтра не обновляются sh. Он по-прежнему показывает старые пункты меню.
Итак, основываясь на предложениях здесь я повторно устанавливаю dataSource
dataSource.bind("requestEnd", function (e) {
if (e.status != "error" && e.response != null) {
//From Kendo's Team
//When grid is configured to use multi checkboxes filter, they are populated only once,
//when the respective filtering menu is opened for the first time.
//This ensures good performance and avoids repetitive and unnecessary HTTP requests.
//By design, the checkboxes's data is refreshed automatically in the following cases:
//1> the Grid dataSource is replaced via the setDataSource method
//2> a Grid data item is added, removed or modified
kendoGrid.setDataSource(dataSource);
}
});
ISSUE
setDatsSource
исправлена проблема с обновлением фильтра sh, но теперь это вызывает другую проблему. Каждый раз, когда срабатывает setDataSource
, он не отображает шаблон заголовка заблокированного столбца. В этом случае вместо флажка в заголовке заблокированного столбца отображается Account ID
. Если я удалю locked(true)
, все будет нормально.
Вопросы 1> Почему даже я должен использовать здесь setDataSource
? При нажатии кнопки я делаю dataSource.read()
, который изменяет dataSource
, поэтому технически фильтры должны обновляться самостоятельно в соответствии с документацией.
2> Я хотел бы знать, могу ли я обновить sh фильтрует без вызова setDataSource.
3> и если (2) невозможно, то как исправить проблему с шаблоном заголовка.