KendoUI MVC Grid не обновляется после чтения - PullRequest
0 голосов
/ 21 июня 2019

Извините, если на этот вопрос уже был дан ответ, но я не могу найти ответ, и я новичок в KendoUI.

У меня есть эта сетка MVC:

@(Html.Kendo()
    .Grid(Model)
    .Name("grid")
    .DataSource(dataSource => dataSource
        .Ajax()
        .ServerOperation(false)
        .Read(r => r.Action("Read", "Search"))
    )
    .Resizable(resize => resize.Columns(true))
    .Selectable(selectable =>
    {
        selectable.Enabled(true);
        selectable.Mode(GridSelectionMode.Single);
    })
    .HtmlAttributes(new { style = "height: 99%;" })
    .Filterable(f => f.Mode(GridFilterMode.Row))
    .Columns(columns =>
    {
    {
        columns.Bound(c => c.DocumentType)
            .Filterable(false)
            .Width("150px")
            .Title(@Localizer["SearchTableHeaderDocumentType"]);

        columns.Bound(c => c.DocumentTypeLong)
            .Filterable(true)
            .Title(@Localizer["SearchTableHeaderDocumentTitle"])
            .Filterable(ftb => ftb.Cell(cell => cell.Operator("contains").SuggestionOperator(FilterType.Contains)));

        columns.Command(command =>
        {
            command.Custom(@Localizer["SearchTableOpenInD3Button"]).Click("open");
            command.Custom(@Localizer["SearchTableReadButton"]).Click("read");
            command.Custom(@Localizer["SearchTableEditButton"]).Click("edit");
        });

    })
    )

Я использую .ServerOperation (false), поскольку я получаю только пару записей из базы данных (макс. 100), которые я хочу иметь возможность искать в сетке локально.

У меня есть кнопка поиска на странице:

    var search = $("#search-field").val();
    if (!search) return;
    if (search.trim() === "") return;
    var dataSource = $("#grid").data("kendoGrid").dataSource;
    var parameters = {
        searchFor: search
    }

    // call the search passing the parameters -> searchFor is the parameter name on the SearchController/Read method
    dataSource.read(parameters);

Когда кнопка нажата, JS выше читает поле поиска, вызывает контроллер и возвращает данные JSON:

enter image description here

мой вопрос: как заставить сетку перезагрузиться после того, как данные были возвращены с моего контроллера? Я вижу ожидающую анимацию из сетки -> как только она останавливается, сетка пуста. Я предполагаю, что сетка вызывает какое-то событие или другое?

Или я все делаю неправильно? Может быть, есть лучший способ сделать это?


снимок экрана, когда я сначала ищу и получаю 3 документа, а затем ищу 8, как вы видите, я получаю 8 документов назад из поиска, но отображаю только первые 3?

enter image description here

Ответы [ 2 ]

0 голосов
/ 03 июля 2019

хорошо, исправили это с помощью Telerik -> проблема была

.ServerOperation(false)

в связи с

.Grid(Model)

означает, что я передал модель в KendoUI и велел ей не получать данные с сервера ?

В основном я выполнял локальный и удаленный поиск данных в одном -> я изменил вызов конструктора, чтобы он не включал модель, то есть .Grid (), и все работало отлично!

0 голосов
/ 21 июня 2019

Это немного странно, потому что, честно говоря, я не вижу ничего плохого в вашем коде.

Когда вы вызываете метод dataSource.read(), сетка должна обновляться автоматически, и вам не нужно ничего делать. Кроме того, из вашего скриншота видно, что данные, возвращаемые с сервера, также имеют правильный формат (то есть a DataSourceResult). Установка .ServerOperation(false) также не является проблемой здесь.

Одним из возможных объяснений является то, что возвращаемые данные могут не соответствовать структуре данных вашей сетки; На вашем скриншоте видно, что возвращенные данные имеют DocumentType, но имеют ли они также DocumentTypeLong, как требуется из вашей таблицы? Убедитесь, что возвращаемые данные имеют тот же тип, что и Model, переданный Html.Kendo().Grid().

...