Hi,
Can you use a variable or a Session["variable"] as the ClientDetailTemplateId value? Or does it have to be a hard-coded string? I would like to be able to control the displaying of the detail template based on a user profile setting. If the user is not allowed to see the details, I'd like to set a variable (or session cookie/variable) to an empty string, otherwise set it to the detail template name.
I already have the detail template working, but would now like to control whether or not it is displayed. When I change the name to an empty string "", the details template does not get displayed, so if I can use a variable for this name, I should be able to get my desired result.
Thanks,
Shawn
Hello
I have a scheduler that I want to filter on 2 different parameters (Team and Factory). With my current implementation I am only able to filter on one of the two. I have a dropdown for the teams and checkbuttons for the factories. So the aim is that you should be able to look at one or all teams AND 1 to all factories. How can I achive this filter?
This is what I got so far:
.Filter(filters => { filters.Add(model => model.teamId).IsEqualTo(4).Or().IsEqualTo(5).Or().IsEqualTo(6); filters.Add(model => model.factoryId).IsEqualTo(1).Or().IsEqualTo(2).Or().IsEqualTo(3); })Do I even really need this if I want to show everything default on load?
$("#teamDDL").change(function (e) { var checked = $.map($("#teamDDL"), function (dropdown) { return parseInt($(dropdown).val()); }); if (checked == "NaN") checked = [4, 5, 6]; var filter = { logic: "or", filters: $.map(checked, function (value) { return { operator: "eq", field: "teamId", value: value }; }) }; var scheduler = $("#scheduler").data("kendoScheduler"); scheduler.dataSource.filter(filter); });$("#factories :checkbox").change(function (e) { var checked = $.map($("#factories :checked"), function (dropdown) { return parseInt($(dropdown).val()); }); var filter = { logic: "or", filters: $.map(checked, function (value) { return { operator: "eq", field: "factoryId", value: value }; }) }; var scheduler = $("#scheduler").data("kendoScheduler"); scheduler.dataSource.filter(filter); scheduler.view(scheduler.view().name); });
So I have 2 functions for updating the filters, one for the dropdown and one for the checkboxes. I need to modify these two functions to do an AND search on both the dropdown value and the checkbox values, how do I do that?
BR
Jonas
I have a web page on which some of the drop down lists need normal text, and some of them will be used on touch screens and hence need large text. If I just add the style...
k-popup .k-item { font-size: 24px;}
That sets the fonts for all drop down lists - not just the touchscreen ones. I have tried the following...
.gatehousedropfont.k-popup .k-item { font-size: 24px;}
$("#LoadTipTypeDropDown").kendoDropDownList({ open: function(e) { e.sender.list.addClass("gatehousedropfont"); }});
...but that just removes all the items from the drop down list. Indeed, even the following call removes all the items from the drop down list:
$("#NewExtraVehicle").kendoDropDownList();
Also, looking at the object in the Chrome inspector implies that something like the following might work - but unfortunately it doesn't:
var theList = $("#LoadTipTypeDropDown").kendoDropDownList;theList[0].style.fontSize = "24";
I've long thought the pattern for bundling files, that included the version number was ugly, and was a barrier to quick upgrade of Kendo versions. Now that we have a private nuget, I wanted to make upgrading versions easier.
As an idea I came up with the following : this removes all version constants from the bundling and layout. It would be nice if there was a static Version getter on the Kendo class though :-) Kendo.Version would make it much clearer (hint!)
//BundleConfig.cs var version = typeof(Kendo.Mvc.UrlGenerator).Assembly.GetName().Version; var kendoVersion = string.Format("{0}.{1}.{2}", version.Major, version.Minor, version.Build); bundles.Add(new StyleBundle("~/Content/kendo/"+kendoVersion+"/css").Include( "~/Content/kendo/"+kendoVersion+"/kendo.common.min.css", "~/Content/kendo/"+kendoVersion+"/kendo.default.min.css" )); bundles.Add(new ScriptBundle("~/Scripts/kendo/" + kendoVersion +"/scripts").Include( "~/Scripts/kendo/" + kendoVersion + "/kendo.all.min.js", "~/Scripts/kendo/" + kendoVersion + "/kendo.aspnetmvc.min.js", "~/Scripts/kendo/" + kendoVersion + "/cultures/kendo.culture.en-GB.min.js" )); //_Layout.cshtml@{ var version = typeof(Kendo.Mvc.UrlGenerator).Assembly.GetName().Version; var kendoVersion = string.Format("{0}.{1}.{2}", version.Major, version.Minor, version.Build);}@Styles.Render("~/Content/kendo/" + kendoVersion + "/css")/* ... */@Scripts.Render("~/Scripts/kendo/" + kendoVersion +"/scripts")
@(Html.Kendo().Grid<Central.Models.ProjectsModel>() .Name("Grid") .Columns(columns => { columns.Bound(p => p.projectCode) .HeaderTemplate("Project Code"); columns.Bound(p => p.protocolNo) .HeaderTemplate("Protocol") .ClientTemplate("<div style='width: 100%; height: 20px; overflow: hidden;'>#if(protocolNo !== null) {#<span title='#=protocolNo#'>#=protocolNo#</span>#}#</div>"); columns.Bound(p => p.description) .HeaderTemplate("Description") .ClientTemplate("<div style='width: 100%; height: 20px; overflow: hidden;'>#if(description !== null) {#<span title='#=description#'>#=description#</span>#}#</div>"); columns.Bound(p => p.typeCode) .HeaderTemplate("Type"); columns.Bound(p => p.userCode) .HeaderTemplate("User"); columns.Bound(p => p.contractValue) .ClientTemplate("<div style='text-align: right;'>#= kendo.toString(contractValue, \"n\")#$#=currency# </div>") .HeaderTemplate("<div style='float: right; margin-right: 10px;'>Contract Value</div>"); columns.Command(c => { c.Edit(); c.Destroy(); }) .HtmlAttributes(new { style = "display: none;" }) .Width(1); }) .DataSource(dataSource => dataSource .Ajax() .Read(read => read.Action("Projects_Read", "Projects")) .Create(create => create.Action("Projects_Create", "Projects")) .Update(update => update.Action("Projects_Update", "Projects")) .Destroy(destroy => destroy.Action("Projects_Destroy", "Projects")) .PageSize(30) .Model(model => { model.Id(p => p.projectCode); model.Field(p => p.projectCode).DefaultValue("#=projectCode#"); }) ) .Pageable() .Filterable() .Sortable() .Resizable(resize => resize.Columns(true)) .Selectable() .Scrollable((scr => scr.Height(500))) .ClientDetailTemplateId("projectsGridDetail") .ToolBar(t => { t.Create(); }) .Editable(e => e.Mode(GridEditMode.PopUp)) .Events(e => { e.Edit(@<text>function(e) { onEdit(e); }</text>); }))<script id="projectsGridDetail" type="text/kendo-tmpl"> @(Html.Kendo().TabStrip() .Name("TabStrip_#=projectCode#") .SelectedIndex(0) .Items(items => { items.Add().Text("Project Details").Content(@<text>@Html.Partial("~/Views/Projects/ProjectsTabs/Details.cshtml")</text>); items.Add().Text("Sites").Content(@<text>@Html.Partial("~/Views/Projects/ProjectsTabs/Sites.cshtml")</text>); items.Add().Text("Contact").Content(@<text>@Html.Partial("~/Views/Projects/ProjectsTabs/Contacts.cshtml")</text>); items.Add().Text("Invoices").Content(@<text>@Html.Partial("~/Views/Projects/ProjectsTabs/Invoices.cshtml")</text>); }) .ToClientTemplate() ) </script>@using Kendo.Mvc.UI<div> @(Html.Kendo().Grid<Central.Models.ProjectsInvoiceModel>() .Name("Invoices_#=projectCode#") .Columns(columns => { columns.Bound(p => p.description) .HeaderTemplate("Description"); columns.Bound(p => p.amount) .HeaderTemplate("Amount") .ClientFooterTemplate("Sum: #=sum# "); columns.Bound(p => p.ubcAmount) .HeaderTemplate("UBC Amount"); columns.Command(p => { p.Edit(); p.Destroy(); }) .Width(158); }) .DataSource(dataSource => dataSource .Ajax() .Aggregates(aggregates => { aggregates.Add(p => p.amount).Sum(); }) .Read(read => read.Action("Invoice_Read", "ProjectsInvoice", new { projectCode = "#=projectCode#" })) // Specify the action method and controller name .Create(create => create.Action("Invoice_Create", "ProjectsInvoice")) .Destroy(destroy => destroy.Action("Invoice_Destroy", "ProjectsInvoice")) .Update(update => update.Action("Invoice_Update", "ProjectsInvoice")) .PageSize(30) .Model(model => { model.Id(p => p.projectInvoiceId); model.Field(p => p.projectCode).DefaultValue("#=projectCode#"); }) ) .ToolBar(toolbar => { toolbar.Create(); }) .Pageable() .HtmlAttributes(new { style = "margin: 7px 0px;" }) .Scrollable(scr => scr.Height(200)) .Filterable() .Sortable() .Editable(edit => { edit.Mode(GridEditMode.PopUp); }) .ToClientTemplate() )</div>I have a grid that is sourced by a List of Objects within my model (local binding). I need to have the editor for the Name column (the only column in the grid) to be a ComboxBox where they can choose from a specified list. I got that part working, however, whenever I leave the combobox, it sets the column to the default value for the name field instead of the chosen item from the combobox. I can not figure out what I am doing wrong.
Here is my grid:
@(Html.Kendo().Grid(Model.Locations) .Name("LocationsGrid") .ToolBar(toolbar => { toolbar.Create().Text("Add Location"); }) .HtmlAttributes(new { style = "height: 150px;" }) .Columns(columns => { columns.Bound(l => l.Name); columns.Command(cmd => cmd.Destroy().Text("<i class='fa fa-trash-o'></i>")).Width(50); }) .Scrollable() .Editable(editable => editable.Mode(GridEditMode.InCell).DisplayDeleteConfirmation(false)) .DataSource(ds => ds.Ajax() .Batch(true) .ServerOperation(false) .Model(model => { model.Id(p => p.Id); model.Field(l => l.Name).DefaultValue("Select a Location"); }) .Create(create => create.Action("AddLocationToProcess", "ProjectConfiguration")) .Destroy(destroy => destroy.Action("RemoveLocationFromProcess", "ProjectConfiguration")) ) .Events(events => events.Edit("LocationsGrid_edit")) )
Here is my Editor:
@model int?@(Html.Kendo().ComboBoxFor(model => model) .Name("SweepTriggeredLocationCB_" + new Random().Next()) .DataTextField("Name") .DataValueField("Id") .Placeholder("Select Location...") .Suggest(true) .Filter(FilterType.StartsWith) .DataSource(ds => { ds.Read(read => read.Action("GetAddProcessLocations", "ProjectConfiguration").Data("GetAddLocationData")); }) .Value(Model.HasValue ? Model.Value.ToString() : null) .Events(events => events.Change("StandardComboBox_change")))
Here is the portion of my Model showing the UIHint for the Editor:
[Required(ErrorMessage = "{0} is required.")][NoWhiteSpace(ErrorMessage = "{0} cannot begin or end with a space.")][UIHint("SweepTriggeredLocationEditor")]public string Name { get; set; }
My grid has 2 aggregate Sum() columns which display and work properly - except for when the user updates the grid amount I want the sum to dynamically update when users tab out of the cell they're editing.
I have tried a myGrid.refresh() on the grid Save event and on the grid datasource Change event. I believe its refreshing the grid but not the sums.
The aggregate is added with this code:
.Aggregates(aggregates =>
{
aggregates.Add(expense => expense.allowedamt).Sum();
aggregates.Add(expense => expense.expenseamt).Sum();
}
and the column and clientFooterTemplates are added with this code:
columns.Bound(expense => expense.expenseamt).HtmlAttributes(new { style = "text-align:right;" }).HeaderHtmlAttributes(new { style = "text-align:right;" }).Width(50)
.ClientFooterTemplate("#= kendo.toString(sum, 'C') #").FooterHtmlAttributes(new { style = "text-align:right;" });
columns.Bound(expense => expense.allowedamt).HtmlAttributes(new { style = "text-align:right;" }).HeaderHtmlAttributes(new { style = "text-align:right;" }).Width(50)
.ClientFooterTemplate("#= kendo.toString(sum, 'C') #").FooterHtmlAttributes(new { style = "text-align:right;" });
Any ideas how to get the Grid summary row values to dynamically update ?
Hello
I'm using a kendo dropdownlistfor() inside a scheduler edit template, if I use just the basic dropdown everything works as expected, but if I try to use the templates for the dropdown all I get is undefined when I click to see the options of the dropdown. If I use the same dropdown directly on the page instead of in a template everything works ok with the dropdown template. Why are they not displaying correct in the scheduler edit template.
So the problem is not with the datasource, I get all values from the db, and the code should be fine since it works directly on the page. I guess the only thing wrong with then code is "data.name" when used inside a template since this gives the undefined. What should it be when used inside a template?
Code:
@(Html.Kendo().DropDownListFor(model => model.equipmentId) .HtmlAttributes(new { style = "width: 240px", @class = "showOpsDiv" }) .DataTextField("name") .DataValueField("id") .OptionLabel("Välj Utrustning...") .Value("-1") .DataSource(source => { source.Read(read => { read.Action("GetEquipment", "Home"); }) .ServerFiltering(true); }) .Template("<span class=\"k-state-default\"></span><span class=\"k-state-default\"><h3>#= data.name #</h3></span>") .HtmlAttributes(new { data_value_primitive = "true" }) )