I have a grid with a column that when not editing I want to show a percentage as 20.00% then when you click to edit, use a NumercTextBoxFor that will limit what you enter to only numerics and a single decimal, then round and/or limit to 2 decimal places (either is fine).
cshtml:
@{ List<AllocationProducts> alloc = new List<AllocationProducts>(); alloc.Add(new AllocationProducts { ProductID = 1, ProductName = "productOne", ProductType = "Model", ProductDescription = "Description one", ProductAllocation = 0.1 }); alloc.Add(new AllocationProducts { ProductID = 2, ProductName = "product2", ProductType = "Model", ProductDescription = "Description two", ProductAllocation = 0.2 }); alloc.Add(new AllocationProducts { ProductID = 3, ProductName = "product3", ProductType = "Model", ProductDescription = "Description three", ProductAllocation = 0.3 }); alloc.Add(new AllocationProducts { ProductID = 4, ProductName = "product4", ProductType = "Model", ProductDescription = "Description four", ProductAllocation = 0.4 });}<div class="summary-view"> @(Html.Kendo().Grid<AllocationProducts>(alloc) .Name("allocationProducts") .Columns(columns => { columns.Bound(o => o.ProductID).Hidden(true); columns.Bound(o => o.ProductType).Title("PRODUCT TYPE").HeaderHtmlAttributes(new { style = "text-align: left;" }).Width("10%").HtmlAttributes(new { style = "padding-left: 10px;" }); columns.Bound(o => o.AllocationAsWholeNumber).Title("TARGET WEIGHT").HeaderHtmlAttributes(new { style = "text-align: right;" }).Template(@<text></text>) .ClientTemplate("<input type='text' id='ProductAllocation_#= ProductID #' value='#= kendo.format('{0:p}', ProductAllocation) #' style='padding: 2px; width: 91%; border: none; text-align: right;' class='product-allocation-input' />") .HtmlAttributes(new { style = "text-align: right; padding-right: 10px;", @class = "product-allocation-field" }) .EditorTemplateName("KendoNumericTextBox"); }) .DataSource(dataSource => dataSource .Ajax() .ServerOperation(false) .Batch(true) .Model(model => { model.Id(o => o.ProductID); }) ) .Mobile() .Selectable() .PersistSelection() .Editable(editable => editable.Mode(GridEditMode.InCell).DisplayDeleteConfirmation(false)) )</div>
KendoNuericTextBox.cshtml:
@model double?@(Html.Kendo().NumericTextBoxFor<double>(m => m) .Name("currency") .Spinners(false) .Decimals(2) .Format("p") .Min(0) .Max(100) .HtmlAttributes(new { style = "width: 100%", title = "currency" }) )
Objects
public class AllocationProducts{ public int ProductID { get; set; } public int ClassID { get; set; } public string ProductType { get; set; } public string ProductName { get; set; } public string ProductDescription { get; set; } public double ProductAllocation { get; set; } public decimal ProductAllocationDecimal { get { return Convert.ToDecimal(ProductAllocation); } } public double AllocationAsWholeNumber { get { return ProductAllocation * 100; } } public string AllocationAsPercent { get { return ProductAllocation.ToString("p2"); } }}
When I run this, I get a standard input box rendered to HTML that allows characters and doesn't do any kind of rounding or limiting of chars.
