Как я могу заставить Kendo Grid использовать числовой фильтр для столбца

#c# #kendo-ui #kendo-grid #kendo-asp.net-mvc

#c# #kendo-ui #kendo-grid #kendo-asp.net-mvc

Вопрос:

Используя следующий код, Kendo Grid использует интерфейс фильтра строк для, t.Files.Count даже если тип является int . Как я могу заставить сетку использовать вместо этого пользовательский интерфейс числового фильтра?

 @(Html.Kendo().Grid<GJW_Site.Web.Models.TargetsModel>()    
    .Name("grid")
    .Columns(columns => {
        columns.Bound(t => t.ID).Width(80);
        columns.Bound(t => t.OrbitalPeriod);
        columns.Bound(t => t.Files.Count);
    })
    .Sortable()
    .Filterable()
    .DataSource(dataSource => dataSource.Ajax()
        .PageSize(20)
        .Read(read => read.Action("Targets_Read", "Targets"))
    )
    .Resizable(o => o.Columns(true))
    .ColumnMenu()
)
  

Создает меню фильтра для строк:

Меню фильтра

Я использую Kendo.MVC 2013.1.514.340

Ответ №1:

Решение состоит в том, чтобы указать, что значение является int в модели — измените DataSource метод таким образом:

 .DataSource(dataSource => dataSource.Ajax()
    .PageSize(20)
    .Read(read => read.Action("Targets_Read", "Targets"))
    .Model(m => {
        m.Field<int>(t => t.Files.Count);
    })
)
  

Комментарии:

1. Это именно то, что я искал

Ответ №2:

Вы также можете использовать это решение:

 .DataSource(dataSource => dataSource.Ajax()
    .PageSize(20)
    .Read(read => read.Action("Targets_Read", "Targets"))
    .Model(m => {
        m.Field("Files.Count", typeof(System.Int32));
    })
)
  

Ответ №3:

Я столкнулся с аналогичной проблемой, когда фильтр поступает для типа данных string, в то время как мой тип данных «number», это происходит, если есть несоответствие в объявлении схемы, убедитесь, что поле, объявленное в schema, правильное, т. Е. имеет то же имя, что и данные, которые вы получаете / предоставляете в grid.

Ответ №4:

Kendo сможет выбрать правильный тип фильтра для каждого столбца, но вам придется использовать свойства вместо полей в TargetsModel .

Например, используйте это:

 public class TargetsModel
{
    public int ID { get; set; }
    public string OrbitalPeriod { get; set; }
    ...
}
  

вместо этого:

 public class TargetsModel
{
    public int ID;
    public string OrbitalPeriod;
    ...
}
  

Если по какой-то причине вы не можете этого сделать, .Model() подход, вероятно, является лучшим способом.