Сетка Kendo очищает шаблон заголовка заблокированного столбца при вызове setDataSource - PullRequest
0 голосов
/ 08 июля 2020

У меня 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) невозможно, то как исправить проблему с шаблоном заголовка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...