Hi,
I have a Grid where i group by the Year and Month from a DateTime (see attached Image - Table1), but without defining the columns and using the Title they display like so (see Table2 image):
How can i make them display properly without showing the Columns or even adding them?
columns.Bound(o => o.TimesheetWorkDateMonthYear.Year).Width(100).Title("Year").ClientTemplate("#: kendo.toString(TimesheetWorkDateMonthYear, 'yyyy') #");columns.Bound(o => o.TimesheetWorkDateMonthYear.Month).Width(100).Title("Month").ClientTemplate("#: kendo.toString(TimesheetWorkDateMonthYear, 'MMM') #");
I've tried adding '.Visable(false)' to the Columns but this doesn't work also.
So I am trying to do something a little odd. I have a few tables with denormalized data. I have a setup table that based on the field name returns a list of values I populate a combobox on my grid with. On my grid when I edit up create a new record it never sends over the selected value. Also, by default if that record in the grid does not have a value it says "null" instead of the placeholder which seems to defeat the whole purpose of a place holder. Any assistance would be greatly appreciated.
public class InventoryViewModel
{
public int InventoryId { get; set; }
public int ProjectId { get; set; }
public int Qty { get; set; }
public bool AuditFlag { get; set; }
public string UpdatedBy { get; set; }
public DateTime? UpdatedDt { get; set; }
public int? ProductNameId { get; set; }
public string Size { get; set; }
public string WorkTypes { get; set; }
[DisplayName("Size")]
[UIHint("NewMeterSizeDDEditor")]
public MeterSizeDDViewModel SizeList { get; set; }
[DisplayName("Work Types")]
[UIHint("WorkTypesMSEditor")]
public IEnumerable<InventoryWorkTypesMSViewModel> WorkTypesMS { get; set; }
public List<InventoryViewModel> GetList(int projectId, int? productNameId)
{
try
{
int ii = 1;
List<InventoryViewModel> model = new List<InventoryViewModel>();
model = _db.Inventories
.Select(i =>
new InventoryViewModel
{
InventoryId = i.InventoryId,
ProjectId = i.ProjectId,
Qty = i.Qty,
AuditFlag = i.AuditFlag,
ProductNameId = i.ProductNameId,
UpdatedBy = i.UpdatedBy,
UpdatedDt = i.UpdatedDt,
Size = i.Size,
WorkTypes = i.WorkTypes,
SizeList = new MeterSizeDDViewModel
{
// WorkOrderFieldDropDownValueId = -1,
Size = i.Size
}
})
.Where(i => i.ProjectId == projectId)
.Where(i => productNameId == 0 || i.ProductNameId == productNameId).ToList();
foreach(var m in model)
{
if(m.WorkTypes != null)
{
string[] workTypeArray = m.WorkTypes.Split(',');
List<InventoryWorkTypesMSViewModel> f = new List<InventoryWorkTypesMSViewModel>();
foreach(string wt in workTypeArray)
{
f.Add(new InventoryWorkTypesMSViewModel
{
Id = ii,
WorkType = wt
});
ii++;
}
m.WorkTypesMS = f.AsEnumerable();
}
}
return model.ToList();
}
catch (Exception ex)
{
StatusErrorHandlingViewModel sc = new StatusErrorHandlingViewModel();
System.Web.UI.Page page = new System.Web.UI.Page();
string loginUserID = page.User.Identity.Name;
sc.Id = -1;
sc.Class = "InventoryViewModel";
sc.Method = "GetList";
sc.User = loginUserID;
sc.Message = ex.ToString();
sc.AddError(sc);
_db.SaveChanges();
return null;
}
}
public JsonResult _PopulateNewMeterSize(string text)
{
var meterSizes = _db.WorkOrderFieldDropDownValues
.Where(v => v.WorkOrderFieldDropDown.WorkOrderField == "NewSize")
.Select(w => new MeterSizeDDViewModel
{
// WorkOrderFieldDropDownValueId = w.WorkOrderFieldDropDownValueId,
Size = w.Value
});
if (!string.IsNullOrEmpty(text))
{
meterSizes = meterSizes.Where(p => p.Size.Contains(text));
}
return Json(meterSizes, JsonRequestBehavior.AllowGet);
}
public void _PopulateNewMeterSizeViewData()
{
var meterSizes = _db.WorkOrderFieldDropDownValues
.Where(v => v.WorkOrderFieldDropDown.WorkOrderField == "NewSize")
.Select(w => new MeterSizeDDViewModel
{
// WorkOrderFieldDropDownValueId = w.WorkOrderFieldDropDownValueId,
Size = w.Value
}); //.OrderBy(v => v.WorkOrderFieldDropDownValueId).ToList();
ViewData["newSize"] = meterSizes;
ViewData["defaultNewSize"] = meterSizes.First();
}
View
<script type="text/kendo" id="WorkTypesMSTemp">
<ul>
#for(var i = 0; i< data.length; i++){#
<li>#:data[i].WorkType#</li>
#}#
</ul>
</script>
<script type="text/javascript">
var WorkTypesMSTemp = kendo.template($("#WorkTypesMSTemp").html(), { useWithBlock: false });
</script>
<h2>Inventory List</h2>
@(Html.Kendo().Grid<FS2.ViewModels.Inventory.InventoryViewModel>()
.Name("grid")
.Columns(columns =>
{
columns.Bound(u => u.InventoryId).Visible(false);
columns.Bound(u => u.ProjectId).Visible(false);
columns.Bound(u => u.ProductNameId).Visible(false);
columns.Bound(u => u.Qty);
columns.Bound(u => u.AuditFlag);
columns.Bound(u => u.SizeList).ClientTemplate("#=SizeList.Size#");
columns.Bound(u => u.WorkTypesMS).ClientTemplate("#=WorkTypesMSTemp.WorkTypesMS#");
columns.Command(command => { command.Destroy(); }).Width(150);
})
.ToolBar(toolBar =>
{
//code to create template
toolBar.Template(@<text>
<div class="toolbarbuttons">
<a id="AddNew" class='k-button k-button-icontext k-grid-add k-state-disabled' href='#'><span class='k-icon k-add'></span>Add new record</a>
<a class='k-button k-button-icontext k-grid-save-changes' href='#'><span class='k-icon k-i-check'></span>Save</a>
@*onclick="return onSave()"*@
</div>
<div class="toolbar">
<label class="workDate-label" for="workDate">Product:</label>
@(Html.Kendo().DropDownList()
.Name("productname")
.OptionLabel("All")
.DataTextField("ProductName")
.DataValueField("ProductNameId")
.AutoBind(false)
.Events(e => e.Change("productnameprojectChange"))
.HtmlAttributes(new { style = "width: 70%;" })
.DataSource(ds =>
{
ds.Read("_PopulateProductNamesDD", "Common");
})
)
<label class="site-label" for="site">Project:</label>
@(Html.Kendo().DropDownList()
.Name("project")
.OptionLabel("All")
.DataTextField("ProjectName")
.DataValueField("ProjectId")
.AutoBind(false)
.Events(e => e.Change("projectChange"))
.HtmlAttributes(new { style = "width: 70%;" })
.DataSource(ds =>
{
ds.Read("_PopulateProjectsDD", "Common");
})
)
</div>
</text>);
})
.Editable(editable => editable.Mode(GridEditMode.InCell))
.Pageable()
.Sortable()
.Scrollable()
.HtmlAttributes(new { style = "height:550px;" })
.DataSource(dataSource => dataSource
.Ajax()
.Batch(true)
.ServerOperation(false)
.Events(events => events
.Error("error_handler")
.Change("onChange")
)
.Model(model =>
{
model.Id(u => u.InventoryId);
model.Field(u => u.Size == u.SizeList.Size);
model.Field(u => u.WorkTypesMS).DefaultValue(new List<FS2.ViewModels.Common.InventoryWorkTypesMSViewModel>());
model.Field(u => u.SizeList).DefaultValue(
ViewData["defaultNewSize"] as FS2.ViewModels.Common.MeterSizeDDViewModel);
})
.PageSize(20)
.Read(read => read.Action("_InventoryListGrid", "Inventory").Data("onRead"))
.Create(create => create.Action("_InventoryListGridCreate", "Inventory").Data("serialize"))
.Update(update => update.Action("_InventoryListGridEdit", "Inventory").Data("serialize"))
.Destroy(destroy => destroy.Action("_InventoryListGridDestroy", "Inventory"))
)
)

I am trying to submit a form that contains localized data and numeric textboxes with decimal numbers.
The culture I use is hr-HR and decimal data numbers look like 123,45. the problem is that whenever the decimals are present, the form will not submit. I think it might be the validation because of the (,) instead of the dot, If I leave zeroes in decimal places, the form submits nicely.
How do I get the form to accept localized decimal numbers?
------------
I've realized that the NumericTextbox doesnt see comma (which are created on GET) as the decimal separator. And due to change culture I cannot use dots. So Im cornered.
Is this a bug or am I missing something?

Hi I have a hidden div that is initiated as a popup window.
The window works fine - dynamically changed title, centre and opens. Unfortunately despite it being set as modal: true it does not display the overlay or behave as a modal.
Below is a html file that demonstrates my problem... Where have I gone wrong?
<!DOCTYPE html><html lang="en" xmlns="http://www.w3.org/1999/xhtml"><head> <meta charset="utf-8" /> <title></title> <link href="http://localhost/DCHR_MVC/Content/bootstrap.css" rel="stylesheet" type="text/css" /> <link href="http://localhost/DCHR_MVC/Content/font-awesome.css" rel="stylesheet" type="text/css" /> <link href="http://localhost/DCHR_MVC/Content/kendo/2018.2.516/kendo.common.min.css" rel="stylesheet" type="text/css" /> <link href="http://localhost/DCHR_MVC/Content/kendo/2018.2.516/kendo.common-bootstrap.min.css" rel="stylesheet" type="text/css" /> <link href="http://localhost/DCHR_MVC/Content/kendo/2018.2.516/kendo.mobile.all.min.css" rel="stylesheet" type="text/css" /> <link href="http://localhost/DCHR_MVC/Content/kendo/2018.2.516/kendo.bootstrap.min.css" rel="stylesheet" type="text/css" /> <link href="http://localhost/DCHR_MVC/CSS/SiteStyles.css" rel="stylesheet" type="text/css" /> <script src="http://localhost/DCHR_MVC/Scripts/jquery-3.3.1.min.js"></script> <script src="http://localhost/DCHR_MVC/Scripts/umd/popper.js"></script> <script src="http://localhost/DCHR_MVC/Scripts/bootstrap.min.js"></script> <script src="http://localhost/DCHR_MVC/Scripts/respond.js"></script> <script src="http://localhost/DCHR_MVC/Scripts/kendo/2018.2.516/jszip.min.js"></script> <script src="http://localhost/DCHR_MVC/Scripts/kendo/2018.2.516/kendo.all.min.js"></script> <script src="http://localhost/DCHR_MVC/Scripts/kendo/2018.2.516/kendo.aspnetmvc.min.js"></script> <script src="http://localhost/DCHR_MVC/Scripts/kendo.modernizr.custom.js"></script></head><body> <div class="btn-group"> <button id="btnCapacity" type="button" class="btn btn-info" data-toggle="tooltip" onclick="approveDCHR('Capacity')">Capacity Approval</button> <button id="btnTechnical" type="button" class="btn btn-secondary" data-toggle="tooltip" onclick="approveDCHR('Technical')">Technical Approval</button> <button id="btnOverall" type="button" class="btn btn-primary" data-toggle="tooltip" onclick="approveDCHR('Overall')">Overall Approval</button> </div> <div id="approvalWindow" style="display:none;"> <div class="card"> <div class="card-header">Comments <i class="fa fa-info-circle" data-toggle="tooltip" title="Approval Comments (mandatory)"></i></div> <div class="card-body"> <textarea id="nApprovalComments" class="form-control w-95" placeholder="Please enter comments"></textarea> </div> </div> <div class="card"> <div class="card-header">Approved By <i class="fa fa-info-circle" data-toggle="tooltip" title="Approved By (cannot be changed)"></i></div> <div class="card-body"> <input id="nApprovalBy" class="form-control w-95" readonly /> </div> </div> <div class="card"> <div class="card-header">Date <i class="fa fa-info-circle" data-toggle="tooltip" title="Date approved (cannot be changed)"></i></div> <div class="card-body"> <input id="nApprovalDate" class="form-control w-95" readonly /> </div> </div> <div class="card"> <div class="btn-group justify-content-between"> <button class="btn btn-info w-25" onclick="approvalClose()">Cancel</button> <button class="btn btn-warning w-25" onclick="approvalClear()">Clear</button> <button class="btn btn-success w-25" onclick="approvalSave()">Save</button> </div> </div> </div></body></html><script> var approvalWindow = $("#approvalWindow"); function approveDCHR(stage) { // reset the appovals window to default values approvalClear(); //set window title and open centered on screen var wnd = approvalWindow.kendoWindow().data("kendoWindow"); console.log(wnd); wnd.title(stage + " Approval"); wnd.refresh(); wnd.center(); wnd.open(); //make texarea autogrow - requires jquery.ns-autogrow - https://github.com/ro31337/jquery.ns-autogrow //$('#nApprovalComments').autogrow({ vertical: true, horizontal: false }); } function approvalClose() { approvalWindow.kendoWindow().data("kendoWindow").close(); } function approvalClear() { // reset the appovals window to default values $('#nApprovalComments').val(""); $('#nApprovalBy').val(""); $('#nApprovalDate').val(new Date()); } function approvalSave() { approvalWindow.kendoWindow().data("kendoWindow").close(); } $(document).ready(function () { //initiate popup window approvalWindow.kendoWindow({ width: "570px", title: "Approval", actions: "", modal: true, visible: false }).data("kendoWindow").close(); });</script>
Hi,
I'm creating a master-detail grid (see the screenshot attached) and I need the following:
Both grids uses local data binding, once the controller returns the view I don't wanna access the server again to read the data of the grids. Here's my code
The view:
01.@(Html.Kendo().Grid(Model.ExpedienteRows)02. .Name("grid_SeleccionarPedidos")03. .Columns(columns =>04. {05. columns.Bound(c => c.IdExpediente).Hidden();06. columns.Bound(c => c.Seleccionado)07. .Width(90);08. columns.Bound(c => c.Autor).Width(190);09. columns.Bound(c => c.AnnoExpediente)10. .Title("Año")11. .Width(70);12. columns.Bound(c => c.NumeroExpediente)13. .Title("Número")14. .Width(120);15. })16. .Editable(ed => ed.Mode(GridEditMode.InCell))17. .HtmlAttributes(new { style = "height: 380px; with: 200px;" })18. .Scrollable(x => x.Height(300))19. .Sortable(x => x.SortMode(GridSortMode.MultipleColumn))20. .Filterable()21. .DataSource(dataSource => dataSource22. .Ajax()23. .ServerOperation(false)24. .Batch(true)25. .Model(model =>26. {27. model.Id(p => p.IdExpediente);28. })29. )30. .ClientDetailTemplateId("pedidos")31. .Events(e => e.DetailInit("detailInit"))32.)33. 34.<script id="pedidos" type="text/kendo-tmpl">35. @(Html.Kendo().Grid<PedidoRow>()36. .Name("gridPedido_#=IdExpediente#")37. .Columns(columns =>38. {39. columns.Bound(c => c.IdPedido).Hidden();40. columns.Bound(c => c.Seleccionado)41. .Width(40);42. columns.Bound(c => c.AnnoPedido).Width(70);43. columns.Bound(c => c.NumeroPedido).Width(70);44. columns.Bound(c => c.Proveedor).Width(70);45. columns.Bound(c => c.DescripcionMaterial).Width(70);46. columns.Bound(c => c.Importe)47. .Format("{0:N4}")48. .Width(70);49. })50. .HtmlAttributes(new { style = "with: 200px;" })51. .ToClientTemplate()52. )53.</script>54. 55.<script>56. function detailInit(e) {57. var grid = $("#gridPedido_" + e.data.IdExpediente).data("kendoGrid");58. grid.dataSource.data(e.data.Pedidos);59. }60.</script>and here's the model
01.public class SeleccionarPedidosModel02.{03. public IEnumerable<ExpedienteRow> ExpedienteRows { get; set; }04.}05. 06.public class ExpedienteRow07.{08. public bool Seleccionado { get; set; } // binded to the first column (checkbox)09. public Guid IdExpediente { get; set; }10. public string Autor { get; set; }11. public int NumeroExpediente { get; set; }12. public int AnnoExpediente { get; set; }13. public IEnumerable<PedidoRow> Pedidos { get; set; } // Detail grid content14.}15. 16.public class PedidoRow17.{18. public Guid IdPedido { get; set; }19. public bool Seleccionado { get; set; } // binded to the first column (checkbox)20. public int NumeroPedido { get; set; }21. public int AnnoPedido { get; set; }22. public string Proveedor { get; set; }23. public string DescripcionMaterial { get; set; }24. public decimal Importe { get; set; }25.}
Any help will be appreciated
Thanks.

I have a gantt control on a page. The toolbar has to have a similar button like the AddTask when clicking on it a context menu should appear.
The gantt configuration looks like this
@(Html.Kendo().Gantt<TaskViewModel, DependencyViewModel>() .Name("gantt") .Toolbar(tb => { tb.Add().Name("append"); tb.Add().Name("pdf"); tb.Add().TemplateId("expandCollapseTemplate"); })And the template like this
<script id="expandCollapseTemplate" type="text/x-kendo-template"> <a class="k-button expandbutton"><span class="k-icon"></span>Expand/Collapse</a> @(Html.Kendo().ContextMenu() .Name("expandMenu") .Filter(".expandbutton") .CloseOnClick(true) .Direction(ContextMenuDirection.Bottom) .OpenOnClick(true) .ShowOn("click") .Items(items => { items.Add().Text("Expand Parent"); items.Add().Text("Expand all"); items.Add().Text("Collapse all"); }) .ToClientTemplate() )</script>However I get an exception:
Unhandled exception at line 25, column 7809 in http://localhost:56541/Scripts/kendo.all.min.js
0x800a139e - JavaScript runtime error: Invalid template:'<button class="k-button k-button-icontext k-gantt-create" type="button" data-action="add"><span class="k-icon k-i-plus"></span><span>Add Task</span></button><button class="k-button k-button-icontext k-gantt-pdf" type="button" ><span class="k-icon k-i-file-pdf"></span><span>Export to PDF</span></button>
<a class="k-button expandbutton"><span class="k-icon"></span>Expand/Collapse</a>
<ul class="k-widget k-reset k-header k-menu k-context-menu k-menu-vertical" id="expandMenu"><li class="k-item k-state-default"><span class="k-link">Expand Parent</span></li><li class="k-item k-state-default"><span class="k-link">Expand all</span></li><li class="k-item k-state-default"><span class="k-link">Collapse all</span></li></ul><script>
kendo.syncReady(function(){jQuery("#expandMenu").kendoContextMenu({"direction":"bottom","openOnClick":true,"filter":".expandbutton","showOn":"click"});});
</script>
' Generated code:'var $kendoOutput, $kendoHtmlEncode = kendo.htmlEncode;with(data){$kendoOutput='<button class="k-button k-button-icontext k-gantt-create" type="button" data-action="add"><span class="k-icon k-i-plus"></span><span>Add Task</span></button><button class="k-button k-button-icontext k-gantt-pdf" type="button" ><span class="k-icon k-i-file-pdf"></span><span>Export to PDF</span></button>\n <a class="k-button expandbutton"><span class="k-icon"></span>Expand/Collapse</a>\n <ul class="k-widget k-reset k-header k-menu k-context-menu k-menu-vertical" id="expandMenu"><li class="k-item k-state-default"><span class="k-link">Expand Parent</span></li><li class="k-item k-state-default"><span class="k-link">Expand all</span></li><li class="k-item k-state-default"><span class="k-link">Collapse all</span></li></ul><script>\n\tkendo.syncReady(function(){jQuery("';expandMenu").kendoContextMenu({"direction":"bottom","openOnClick":true,"filter":".expandbutton","showOn":"click"});});
</script>
;$kendoOutput+=;}return $kendoOutput;'
I have used the same template on a grid and no exception was thrown.
The telerik version that I tested was with 2018.1.221.545. Was this issue fixed in the latest version or what am I doing wrong?
Hey Telerik team .
i'm using Telerik Gantt Chart. it's great really awesome.
I have a requirement to add my custom Recources dialog in the Gantt chart or populate existing resources dialog based on the StartDate and EndDate of the selected task.
when dialog is open to assign resources to task based on the StartDate and EndDate of the selected task the resources dialog will be populated after checking from the server that is the resources are available on the selected DateTime or not. if available then all will be in the dialog box to be selected as a assignee which are not available on that date will not be there in the list !
is that possible in this gantt chart with the existing resources dialog or not ? or is this possible to use my own resource dialog box and do all this stuff ?
please let me know.
Thankyou.
Regards: Nabil Nawaz

Hi,
i am facing issue with Kendo Combo boxes, where the Change event is getting fired two times, please find the below code.
<table>
<tr id="controls">
<td>
<label id="lbl1">Config Type:</label>
</td>
<td>
@(Html.Kendo().ComboBox()
.Name("cmb_configType")
.HtmlAttributes(new { @class = "fieldentertext", required = "required", style = "width:85%;", validationmessage = "" })
.Placeholder("Select Config Type...")
.DataTextField("ConfigTypes")
// .DataValueField("Names")
.Filter(FilterType.Contains)
.Events(e =>
{
e.Change("OnChange_ConfigType");
//.Select("OnSelect_Config")
//.Open("OnOpen_Config")
//.Close("OnClose_Config")
//.DataBound("OnDataBound_Config")
//.Filtering("OnFiltering_Config");
})
)
</td>
<td>
<label id="lbl3">Config Name:</label>
</td>
<td>
@(Html.Kendo().ComboBox()
.Name("cmb_confignames")
.HtmlAttributes(new { @class = "fieldentertext", required = "required", style = "width:85%;", validationmessage = "" })
.Placeholder("Select Config Name...")
.DataTextField("ConfigNames")
// .DataValueField("Names")
.Filter(FilterType.Contains)
.Events(e =>
{
e.Change("OnChange_ConfigNames");
//.Select("OnSelect_Config")
//.Open("OnOpen_Config")
//.Close("OnClose_Config")
//.DataBound("OnDataBound_Config")
//.Filtering("OnFiltering_Config");
})
)
</td>
<td>
<button class="btn-brdr" id="btnctrl">+</button>
</td>
</tr>
</table>
i am creating two combo boxes 1. Config Type 2. Config Name
when user clicks on first combo, based on the selection i am loading data to second combo box.
when User clicks on Second Combo box(Config Name), It is firing the event for(Config Type) once again and then it is firing event for(Config Name), Why it is firing event for First combo box, when i select on Second combo box?
And also i observed that, if i click on any where in the page these two events are firing, What is wrong in this code?
Here are my fucntions which gets hit on event.
function OnChange_ConfigType(obj)
{
---------------------
}
function OnChange_ConfigName(obj)
{
--------------------
}
Please help on this.