#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()
подход, вероятно, является лучшим способом.