2013-02-28 4 views
6

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

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

ответ

11

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

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")); 

} 
+0

Я пробовал много, но у меня нет выражения лямбды в поле «Фильтровать» «Фильтровать» (x => x.UI («NumericFilter»)); ». Нужно ли добавлять js или что-то еще? –

+0

Я думаю, нет. Я использую Кендо MVC 2013.2.716.340 Также проверьте ваш web.config имеет следующую строку <добавить пространство имен = "Kendo.Mvc.UI" />

+0

У меня есть это настройка i web config. Но версия, которую я использую: 2012.2.913.340. Так может быть, именно по этой причине я не получаю лямбда-выражения. –

-1

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

c.Bound(x => x.ColumnName).Format("{0:#}"); 
+3

Это Didn, т работал как это установить формат данных, которые отображаются в столбце, но данные I, отображаемые в фильтре, чтобы быть в не десятичный формат. –

0

Вы можете установить формат на фильтрованию на колонке, как это:

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

Update Это Java-версия. вот мой полный Defintion сетки:

 $("#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" 
         }); 
        } 
       } 
      } 
     ] 
    }; 
+0

ваш код не работает.пожалуйста, дайте мне больше информации. –

1

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

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

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

-1

На Кендо NumericTextBox, формат используется для форматирования содержимого ввода, когда он не сфокусирован. У вас есть tu use Decimals du форматирует ввод, когда он сфокусирован. Например вот это NumericTextbox (asp.net), показывающий всегда целое число:

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

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

1

Palani Kumar сказал, что все еще вставляются разделители, то есть он преобразует 12345 в 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> 
2

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

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

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

Эта функция не поддерживается для столбцов, у которых установлены их значения. Если для параметра filterable.mode установлено значение 'row', для настройки ввода следует использовать 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> 
+0

Спасибо. Это сработало для меня. – Prakash

+0

Спасибо .. Это сработало для меня – KaviSuja