Telerik MVC Grid не сортируется при перезагрузке - PullRequest
1 голос
/ 04 декабря 2011

Моя сетка Telerik MVC привязана к Ajax, и мне нужна возможность применять пользовательскую фильтрацию с помощью двух флажков (в DIV вверху). Когда флажок установлен, параметры будут установлены, и сетка будет перезагружена. Это работает нормально. Во время начальной загрузки данные сортируются на основе настроек сортировки в Telerik, но после того, как я установил флажок, данные упорядочиваются по идентификатору записи, а не по приоритету. Если я затем нажму F5, страница будет перезагружена, и данные отсортированы правильно. Сортировка может быть параметром для grid.rebind () или предоставлена ​​в OnDataBinding, но до сих пор я не нашел того, что ищу.

ВОПРОС: Как указать порядок сортировки в OnDataBinding или, возможно, в другом клиентском событии.

Вот мой код:


<div style="float:right;width:600px;text-align:right">
    <span>My Items <%=Html.CheckBox("newItems") %></span>
    <span>Closed Items <%=Html.CheckBox("Inactive") %></span>
</div>

<% Html.Telerik().Grid<IssueModel>()
        .Name("Grid")
        .PrefixUrlParameters(false)
        .Columns(col =>
        {
            col.Bound(o => o.Title);
            col.Bound(o => o.Priority).Width(50).Title("Priority ID");
            col.Bound(o => o.PriorityName).Width(100).Title("Priority");
            col.Bound(o => o.IssueStateName).Width(100).Title("Status");
            col.Bound(o => o.AssignedToName).Width(140).Title("Assigned To");
        })
        .DataBinding(d => d.Ajax().Select("AjaxSelect", "Ticket", new { isNew = false, isInactive = false }))
        .ClientEvents(e => e.OnDataBinding("onDataBinding"))
        .Sortable(s => s
            .SortMode(GridSortMode.MultipleColumn)
            .OrderBy(order =>
                            {
                                order.Add(o => o.Priority);
                                order.Add(o => o.Sequence);
                            })
            )
        .Pageable(p => p.PageSize(15))
        .Filterable()
        .Render();
%>

<script type="text/javascript">
    function onDataBinding(e) {
        e.data = { 
            isNew: $("#newItems").is(':checked'), 
            isInactive: $("#Inactive").is(':checked') 
        };
        e.orderBy = "Severity~desc~Ranking~asc";
    }
    $("input[type='checkbox']").click(function () {
        var grid = $('#Grid').data('tGrid');
        var param = {
            isNew: $("#newItems").is(':checked'),
            isInactive: $("#Inactive").is(':checked')
        };
        grid.rebind(param);
    });
</script>

1 Ответ

2 голосов
/ 05 декабря 2011

Я нашел решение на случай, если другим понадобится ответ.Я использовал grid.sort () вместо grid.rebind ();Метод sort принимает строку в формате: имя столбца в тире.Первый пример

<script type="text/javascript">
    function onDataBinding(e) {
        e.data = { 
            isNew: $("#newItems").is(':checked'), 
            isInactive: $("#Inactive").is(':checked') 
        };
    }
    $("input[type='checkbox']").click(function () {
        var grid = $('#Grid').data('tGrid');
        var param = {
            isNew: $("#newItems").is(':checked'),
            isInactive: $("#Inactive").is(':checked')
        };
        grid.sort("Severity-desc~Ranking-asc";);
        //grid.rebind(param);
    });
</script>
...