Telerik Forums
UI for ASP.NET MVC Forum
1 answer
343 views
@model IEnumerable<dynamic>
@(
 Html.Kendo().Grid(Model).Name("resgrid")
 .RowAction(row =>
 {
     row.HtmlAttributes["style"] = "background:red;";
 })
 .CellAction(cell =>
 {
              cell.HtmlAttributes["style"] = "background:red;";
 })
 .DataSource(ds => ds.Custom()
    .Transport(t=>t.Read(r =>
    {
        r.Url("../Report/ResultGridRead/" + @ViewBag.ID).DataType("json");
    }))
    )
    .Events(e=>e.DataBinding("DataBinding").DataBound("DataBound"))
)
Kostadin
Telerik team
 answered on 12 Dec 2016
2 answers
584 views

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

Shawn
Top achievements
Rank 1
 answered on 12 Dec 2016
2 answers
234 views

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

Jonas
Top achievements
Rank 1
 answered on 12 Dec 2016
4 answers
2.0K+ views

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

 

Ivan Zhekov
Telerik team
 answered on 12 Dec 2016
3 answers
250 views

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")
Angel Petrov
Telerik team
 answered on 12 Dec 2016
3 answers
244 views
I'm looking to pass some initial filters to the grid via the query string in the URL.
I know this is possible as I can do things like.... ?grid-page=5, ?grid-sort=Price-desc.
This is fine but I cannot find any documentation that lists all of the available filters, sorting and paging etc...
For example, the things I want to do with filtering are more complex, like - price less than 20 and price greater than 5.
How can I achieve what I'm looking for and where is the documentation?
I'm sure this can be done... ?
Thanks
Eyup
Telerik team
 answered on 12 Dec 2016
7 answers
758 views
I'm currently having an issue with aggregates on child grids. For the system I am currently developing, we have a grid that shows our businesses different projects. Each row expands out using the "detail template" (kendo ui detail template demo) feature to show a tabset with each tab having a sub grid. The aggregate i am trying to implement is in the invoices tab's grid for a project, i would like to have a sum of the amount of each invoice generated. I have followed the tutorials exactly (kendo ui aggregate demo) but the rows will no longer expand out and the javascript console shows the error: "Uncaught ReferenceError: sum is not defined".

The exact same code used to do the aggregation on this grid will work on the parent grid fine. I'm very unsure as to why i'm getting this error. Below i've listed out the code for the grids and attached screenshots of the grids in action.

Any help will be appreciated.

Parent grid view code:
@(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>
As you can see, it uses partial views to separate the code out for the sub grids.

Invoices grid view code:
@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>
Attached files:
1. The grid when trying to expand rows while #=sum# is in the client footer template for the aggregate column.
2. The grid expanding normally without #=sum# used.
Rosen
Telerik team
 answered on 09 Dec 2016
1 answer
57 views

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; }

Konstantin Dikov
Telerik team
 answered on 09 Dec 2016
1 answer
784 views

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 ?

Kostadin
Telerik team
 answered on 09 Dec 2016
2 answers
192 views

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" })
                 )     
Jonas
Top achievements
Rank 1
 answered on 08 Dec 2016
Narrow your results
Selected tags
Tags
+? more
Top users last month
Rob
Top achievements
Rank 3
Iron
Iron
Iron
Atul
Top achievements
Rank 1
Iron
Iron
Iron
Alexander
Top achievements
Rank 1
Veteran
Iron
Serkan
Top achievements
Rank 1
Iron
Shawn
Top achievements
Rank 1
Iron
Iron
Want to show your ninja superpower to fellow developers?
Top users last month
Rob
Top achievements
Rank 3
Iron
Iron
Iron
Atul
Top achievements
Rank 1
Iron
Iron
Iron
Alexander
Top achievements
Rank 1
Veteran
Iron
Serkan
Top achievements
Rank 1
Iron
Shawn
Top achievements
Rank 1
Iron
Iron
Want to show your ninja superpower to fellow developers?
Want to show your ninja superpower to fellow developers?