Изменение формата числового фильтра кендо

Я применяю пользовательское разбиение по страницам и сортировку в сетке кендо. Для одного из моих столбцов я получаю числовое текстовое поле. Когда я вставляю значение в числовое текстовое поле, оно является целым числом, но когда фокус удаляется из числового текстового поля фильтра, оно преобразуется в десятичное число. Например: если я ввел 32, останется 32, но когда фокус будет удален, значение станет 32,00. Но я хочу, чтобы это значение оставалось равным 32.

Так что любой может помочь мне с решением.


person Anirudh Agarwal    schedule 28.02.2013    source источник


Ответы (8)


Вы можете установить, как показано ниже

columns.Bound(x => x.Property).Filterable(x => x.UI("NumericFilter"));

<script type="text/javascript">
function NumericFilter(control) {
    $(control).kendoNumericTextBox({ "format": "n0", "decimals": 0 });

}
</script>

Или используйте метод расширения

columns.NumericColumn(x => x.Property);

public static GridBoundColumnBuilder<TModel> NumericColumn<TModel, TValue>(this GridColumnFactory<TModel> Column, Expression<Func<TModel, TValue>> Expression) where TModel : class
{
    return Column.Bound(Expression).Filterable(x => x.UI("NumericFilter"));

}
person Palanikumar    schedule 21.08.2013
comment
Я много пробовал, но у меня нет лямбда-выражения в поле FilterableFilterable(x => x.UI(NumericFilter));. Нам нужно добавить некоторые js или что-то в этом роде? - person Anirudh Agarwal; 23.08.2013
comment
Я думаю нет. Я использую Kendo MVC 2013.2.716.340. Также убедитесь, что в вашем web.config есть строка ниже ‹system.web› ‹pages› ‹namespaces› ‹add namespace=Kendo.Mvc.UI /› ‹/namespaces› ‹/pages› ‹system .веб› - person Palanikumar; 24.08.2013
comment
У меня есть этот параметр в веб-конфигурации. Но версия, которую я использую: 2012.2.913.340. Возможно, это причина, по которой я не получаю лямбда-выражение. - person Anirudh Agarwal; 27.08.2013
comment
Это решение отлично работает, но по-прежнему вставляет запятые-разделители, когда числовые текстовые поля теряют фокус. Смотрите решение @Kamran ниже, чтобы исправить это. - person jaredbaszler; 19.01.2016
comment
Спасибо. Работает нормально :). Для метода расширения используйте System.Linq.Expressions; Пространство имен. - person Thulasiram; 19.05.2020

У меня была такая же проблема и columns.Bound(x => x.Property).Filterable(x => x.UI("numericFilter")); у меня не работал. Хрюша, отказываясь от ответа Ксавьера Джона, я использовал columns.filterable.cell.template, чтобы решить свою проблему, потому что в документации телерика говорится:

columns.filterable.ui Строка |Функция

Атрибут данных роли виджета, используемый в меню фильтра, или функция JavaScript, которая инициализирует этот виджет.

Эта функция не поддерживается для столбцов, для которых установлен параметр значений. Если для filterable.mode установлено значение «строка», следует использовать columns.filterable.cell.template для настройки ввода.

http://docs.telerik.com/kendo-ui/api/javascript/ui/grid#configuration-columns.filterable.ui

Вот мой код

    @(Html.Kendo().Grid<UnsoldStockBO.USS_STOCK>()
        .Name("searchGrid")
        .Columns(columns =>
        {
            columns.Bound(c => c.CyAbbrev);
            columns.Bound(c => c.UssCrop).Filterable(filter => filter.Cell(c => c.Template("IntegerFilter")));
            columns.Bound(c => c.TtAbbrev);
            columns.Bound(c => c.PtAbbrev);
            columns.Bound(c => c.UssInternalGrade);
            columns.Bound(c => c.SuggestedPrice).Format("{0:c2}").Filterable(filter => filter.Cell(c => c.Template("NumericFilter")));
            columns.Bound(c => c.UssCtPricePerKilo).ClientTemplate("#:kendo.toString(UssCtPricePerKilo, 'c', Culture)#").Filterable(filter => filter.Cell(c => c.Template("NumericFilter")));
            columns.Bound(c => c.UssNetKilos).Format("{0:n}").Filterable(filter => filter.Cell(c => c.Template("NumericFilter")));
            columns.Bound(c => c.UssWriteDownCount).Format("{0:n0}").Filterable(filter => filter.Cell(c => c.Template("IntegerFilter")));
            columns.Command(command =>
            {
                command.Edit().HtmlAttributes(new { @title = "Quick Edit" });
                command.Custom("EditStock").HtmlAttributes(new { @title = "Edit" });
                command.Destroy().HtmlAttributes(new { @title = "Delete" });
            }).HtmlAttributes(new { @nowrap = "nowrap" });
        })
        .Mobile()
        .ToolBar(toolbar => toolbar.Custom().Text("Add Stock").Action("Create", "Stock").Name("AddStock"))
            .Editable(editable => editable.Mode(GridEditMode.InLine).DisplayDeleteConfirmation("This record will be permanently deleted and cannot be recovered. Are you sure?"))
            .Filterable(ftb => ftb.Mode(GridFilterMode.Row))
            .Sortable()
            .Pageable()
            .Events(e => e.DataBound("onDataBound").Cancel("onCancel"))
        .NoRecords("No records found.")
        .Resizable(resize => resize.Columns(true))
        .DataSource(dataSource => dataSource
            .WebApi()
            .ServerOperation(true)
            .PageSize(30)
                        .Events(events => events.Error("error_handler").Sync("sync_handler"))
                    .Model(model =>
                    {
                        model.Id(p => p.UssId);
                        model.Field(c => c.CyAbbrev).Editable(false);
                        model.Field(c => c.UssCrop).Editable(false);
                        model.Field(c => c.TtAbbrev).Editable(false);
                        model.Field(c => c.PtAbbrev).Editable(false);
                        model.Field(c => c.UssInternalGrade).Editable(false);
                        model.Field(c => c.SuggestedPrice).Editable(false);
                    })
                    .Read(read => read.Url(Url.HttpRouteUrl("DefaultApi", new { controller = "webapi", action = "UnsoldStock_Get", userId = ((UnsoldStockBO.PSI_USER)Session["USS_User"]).UUid })))
                                .Update(update => update.Url(Url.HttpRouteUrl("DefaultApi", new { controller = "webapi", action = "UnsoldStock_Update", userName = ((UnsoldStockBO.PSI_USER)Session["USS_User"]).UUserName })).Type(HttpVerbs.Post))
                                    .Destroy(destroy => destroy.Url(Url.HttpRouteUrl("DefaultApi", new { controller = "webapi", action = "UnsoldStock_Delete", id = "{0}", userName = ((UnsoldStockBO.PSI_USER)Session["USS_User"]).UUserName })).Type(HttpVerbs.Delete))

                )
    )

<script type="text/javascript">

    function IntegerFilter(args) {
        args.element.kendoNumericTextBox({ format: "#", decimals: 0, spinners: false });
    }

    function NumericFilter(args) {
        args.element.kendoNumericTextBox({ spinners: false });
    }

</script>
person Earl    schedule 30.09.2015

Установите столбец фильтра как

column.filterable = {
    ui: numberFilter,
    cell: {
        template: numberFilter,
    }
};

function numberFilter(args) {
    var element = args instanceof jQuery ? args : args.element;
    element.kendoNumericTextBox({
        format: "n0"
    });
}

person Xavier John    schedule 31.10.2014

То, что сказал Палани Кумар, по-прежнему вставляет разделители, то есть преобразует 12 345 в 12 345; поэтому я рекомендую следующий отредактированный код, если вам нужны чистые числа без какого-либо форматирования (без разделителей, без десятичных точек и т. д.).

columns.Bound(x => x.Property).Filterable(x => x.UI("numericFilter"));

<script type="text/javascript">
    function numericFilter(control) {
        $(control).kendoNumericTextBox({ format: "#", decimals: 0 });

    }
</script> 
person Kamran    schedule 26.08.2015

Вы можете установить формат для фильтруемого столбца следующим образом:

            field: "TaskId",
            title: "TaskId",
            width: 80,
            filterable: {
                ui: function (element) {
                    element.kendoNumericTextBox({
                        format: "n0"
                    });
                }
            }

Обновление Это версия JavaScript. здесь мое полное определение сетки:

      $("#uxRunningTasksGrid").kendoGrid({
        dataSource: runningTasksDataSource,
        height: $(document).height() - 280,
        autoBind: true,
        filterable: true,
        sortable: true,
        pageable: false,
        reorderable: true,
        resizable: true,
        columns: [{
            command: { text: "Details", click: openDetails }, title: " ", width: 80
        },
            {
                field: "TaskId",
                title: "TaskId",
                width: 80,
                filterable: {
                    ui: function (element) {
                        element.kendoNumericTextBox({
                            format: "n0"
                        });
                    }
                }
            }
        ]
     };
person Flores    schedule 22.05.2013

Для базовой сетки asp.net: columns.Bound(c => c.Expenditure).Format("{0:#,###.00}").Width(75);

person sojim2    schedule 19.06.2019

Просто установите формат столбца:

c.Bound(x => x.ColumnName).Format("{0:#}");
person Björn Lindqvist    schedule 07.03.2013
comment
Это не сработало, так как установило формат для данных, отображаемых в столбце, но данные, отображаемые в фильтре, были в недесятичном формате. - person Anirudh Agarwal; 15.03.2013

В Kendo NumericTextBox Format используется для форматирования содержимого ввода, когда он не сфокусирован. Вы должны использовать десятичные знаки для форматирования ввода, когда он сфокусирован. Например, вот NumericTextbox (asp.net), всегда отображающий целое число:

@(Html.Kendo().NumericTextBox<decimal>()
        .Name("Total")
        .Format("n0")
        .Decimals(0)
    )

Надеюсь, это поможет кому-то.

person Thibaud Lacan    schedule 20.11.2014