Как показать все элементы в сетке, когда фильтр DataSource не возвращает ни одного? - PullRequest
0 голосов
/ 14 февраля 2019

Я установил фильтр в своем источнике данных, чтобы при входе в сетку он был предварительно отфильтрован на основе кнопки, которую пользователь нажал.Это фильтрует элементы на основе статуса.Состояния являются перечислениями, и каждое перечисление имеет описание, потому что Items To Return выглядит лучше, чем ItemsToReturn.Тем не менее, пользователь может получить доступ к сетке, не используя один из этих параметров.Когда они это делают, сетка пуста, потому что когда ничего не выбрано, ничего не отображается.

@(Html.Kendo().Grid<Item>()
                .Name("grid").Scrollable(c => c.Enabled(true).Height(1000))
                .DataSource(dataSource => dataSource
                    .Ajax()
                    .Filter(f=>f.Add(a=>a.StatusName).IsEqualTo(ViewBag.Status))
                    .Read(read => read.Action("KendoInitializer", "Controller"))
                    .PageSize(20)
                    )

Фильтр установлен в источнике данных.Он принимает StatusName, который является неотображенным членом моей ViewModel

[NotMapped]
    public string StatusName => Status.GetDescription();

. Он принимает статус и использует метод расширения, чтобы получить описание из перечисления

 public static string GetDescription(this Enum e)
    {
        var field = e.ToString();
        var attribute = e.GetType().GetField(field).GetCustomAttributes(typeof(DescriptionAttribute), false).FirstOrDefault();

        return attribute != null ? ((DescriptionAttribute)attribute).Description : field;
    }

InitialФильтрация работает, проверяя, что пользователь нажал, чтобы попасть в сетку.Например, @ Model.Items.Where (e => e.Status == StatusType.ItemsToReturn) .Count ()

И затем в контроллере он определяет, что передается в сетку кендо.

  [HttpGet]
    public ActionResult DeviceLogWIP(StatusType status)
    {
        ViewBag.Title = "Device Log - WIP";

        List<Item> items= new List<Item>();
        if (status.ToString() != "" && status.ToString() != null && status!= 0)
        {
            ViewBag.Status = status.GetDescription();
            items= _itemDeviceService.GetItems().ToList();
        }
        else
        {
            items= _itemDeviceService.GetItemss().ToList();
        }


        return View(new DeviceLogViewModel()
        {
            Items= items
        });
    }

Если ничего не выбрано, 0 передается, и это вызывает исключение нулевой ссылки в методе расширения.Поэтому я попытался просто инициализировать Grid, не отправляя никакие параметры, но затем он проверяет, где StatusName равно null, а затем загружает пустое значение, потому что никогда не бывает времени, когда это происходит.

Я думал о добавлении события, которое проверяет, является ли значение ViewBag.Status нулевым, а затем перезагружается, но мне интересно, какой будет лучший метод.

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