Telerik Forums
UI for ASP.NET MVC Forum
1 answer
149 views

Hi All,

          please let me know we put dropdownlist in grid as child control?  And how it populate?

Eyup
Telerik team
 answered on 13 Dec 2016
1 answer
407 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
649 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
325 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.1K+ 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
328 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
276 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
829 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
92 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
831 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
Narrow your results
Selected tags
Tags
Grid
General Discussions
Scheduler
DropDownList
Chart
Editor
TreeView
DatePicker
ComboBox
Upload
MultiSelect
ListView
Window
TabStrip
Menu
Installer and VS Extensions
Spreadsheet
AutoComplete
TreeList
Gantt
PanelBar
NumericTextBox
Filter
ToolTip
Map
Diagram
Button
PivotGrid
Form
ListBox
Splitter
Application
FileManager
Sortable
Calendar
View
MaskedTextBox
PDFViewer
TextBox
Toolbar
Dialog
MultiColumnComboBox
DropDownTree
Checkbox
Slider
Switch
Notification
Accessibility
ListView (Mobile)
Pager
ColorPicker
DateRangePicker
Security
Wizard
Styling
Chat
DateInput
MediaPlayer
TileLayout
Drawer
SplitView
Template
Barcode
ButtonGroup (Mobile)
Drawer (Mobile)
ImageEditor
RadioGroup
Sparkline
Stepper
TabStrip (Mobile)
GridLayout
Badge
LinearGauge
ModalView
ResponsivePanel
TextArea
Breadcrumb
ExpansionPanel
Licensing
Rating
ScrollView
ButtonGroup
CheckBoxGroup
NavBar
ProgressBar
QRCode
RadioButton
Scroller
Timeline
TreeMap
TaskBoard
OrgChart
Captcha
ActionSheet
Signature
DateTimePicker
AppBar
BottomNavigation
Card
FloatingActionButton
Localization
MultiViewCalendar
PopOver (Mobile)
Ripple
ScrollView (Mobile)
Switch (Mobile)
PivotGridV2
FlatColorPicker
ColorPalette
DropDownButton
AIPrompt
PropertyGrid
ActionSheet (Mobile)
BulletGraph
Button (Mobile)
Collapsible
Loader
CircularGauge
SkeletonContainer
Popover
HeatMap
Avatar
ColorGradient
CircularProgressBar
SplitButton
StackLayout
TimeDurationPicker
Chip
ChipList
DockManager
ToggleButton
Sankey
OTPInput
ChartWizard
SpeechToTextButton
InlineAIPrompt
TimePicker
StockChart
RadialGauge
ContextMenu
ArcGauge
AICodingAssistant
SmartPasteButton
PromptBox
SegmentedControl
+? more
Top users last month
Miljana
Top achievements
Rank 2
Iron
Iron
Joel
Top achievements
Rank 3
Bronze
Bronze
Bronze
Cynthia
Top achievements
Rank 1
John
Top achievements
Rank 1
Iron
Mozart
Top achievements
Rank 1
Iron
Veteran
Want to show your ninja superpower to fellow developers?
Top users last month
Miljana
Top achievements
Rank 2
Iron
Iron
Joel
Top achievements
Rank 3
Bronze
Bronze
Bronze
Cynthia
Top achievements
Rank 1
John
Top achievements
Rank 1
Iron
Mozart
Top achievements
Rank 1
Iron
Veteran
Want to show your ninja superpower to fellow developers?
Want to show your ninja superpower to fellow developers?