Telerik Forums
UI for ASP.NET Core Forum
1 answer
330 views

Hello,

I am developing a ASP.NET core Telerik Wizard prototype, each step is a form. The issue is that I have a submit button for the form and next button for the wizard so the user has to click on submit and then on next to continue. I would like to submit the form when the user clicks on the next button. Is it possible? If I cannot submit the form with the next button I will have to bin the prototype. 

Kind Regards.

Marconi
Top achievements
Rank 1
Veteran
 answered on 08 Nov 2020
1 answer
430 views

Good morning, 

I'm new to Telerik and doing a POC evaluation using the Aspnet Core Grid control to see if it will work for our situation.  I've worked through most issues along the way, but I'm unable to get aggregates to work on the grid so far and I'm hoping it's something simple I'm missing and not a limitation of aggregates within a nested grid hierarchy. 

Here is the scenario:

I am trying to do a simple count of items in the nested grid and place them using the .ClientGroupHeaderColumnTemplate.  I'm also adding the .Aggregates to the DataSource call.  When I do so, I am unable to access the grid and get the following javascript error:  "Uncaught ReferenceError: count is not defined"

I believe I have followed all the demos/examples/threads that I've found online correctly, but the difference is that this grid is nested within 2 other grids. I have also tried several of the other ClientTemplates (footer, header, etc...) with the same result.  Thanks in advance for any help you can give and let me know if you need additional information.

Here is the code I'm calling for this grid:

<script id="agents" type="text/kendo-tmpl">
    @(Html.Kendo().Grid<TLCAgentSchedulerT.Models.AgentViewModel>
    ()
    .Name("agent_#=SubPodId#")
    .Columns(columns =>
    {

        columns.Bound(o => o.AgentName).Width(50);
        columns.Bound(o => o.Block1).Width(4)
            .ClientGroupHeaderColumnTemplate("Sum: #= count#")
            .ClientTemplate(@"<div class='agentStatus' style='background-image: url(" + @Url.Content("~/images/\\#:data.Block1\\#.png") + ");'></div>").ClientHeaderTemplate("<span data-toggle='tooltip' data-placement='top' title='6:00 AM EST'>B1</span>");
        columns.Bound(o => o.Block2).Width(4).ClientTemplate(@"<div class='agentStatus' style='background-image: url(" + @Url.Content("~/images/\\#:data.Block2\\#.png") + ");'></div>").ClientHeaderTemplate("<span data-toggle='tooltip' data-placement='top' title='6:00 AM EST'>B2</span>");
        columns.Bound(o => o.Block3).Width(4).ClientTemplate(@"<div class='agentStatus' style='background-image: url(" + @Url.Content("~/images/\\#:data.Block3\\#.png") + ");'></div>").ClientHeaderTemplate("<span data-toggle='tooltip' data-placement='top' title='6:00 AM EST'>B3</span>");
        columns.Bound(o => o.Block4).Width(4).ClientTemplate(@"<div class='agentStatus' style='background-image: url(" + @Url.Content("~/images/\\#:data.Block4\\#.png") + ");'></div>").ClientHeaderTemplate("<span data-toggle='tooltip' data-placement='top' title='6:00 AM EST'>B4</span>");
        //Add Additional Blocks

        columns.Command(command =>
        {
            command.Edit().Text("Edit Agent");
        }).Width(25);
    })
    .DataSource(dataSource => dataSource
        .Ajax()
        //.Read(read => read.Action("EditAgent", "Grid"))
        .Update(update => update.Action("EditAgent", "Grid"))
        .Events(events => events.Error("error_handler"))
        .Aggregates(aggregates =>
        {
            aggregates.Add(p => p.Block1).Count();
        })
        .Group(groups => groups.Add(p=> p.Block1))
        .PageSize(5)
        .Read(read => read.Action("GetAgents", "Grid", new { subPodId = "#=SubPodId#" }))
        )
        //.ToolBar(toolbar => toolbar.Create()) //Adds 'Add New Record' button to toolbar
        .Editable(editable => editable.Mode(GridEditMode.PopUp))
        .Scrollable()
        //.Sortable()
        .ToClientTemplate()
    )
</script>

 

 

 

 

Eyup
Telerik team
 answered on 06 Nov 2020
6 answers
1.1K+ views
I would like to know how to export all the columns (or a set) to an Excel file.  I have searched this ans it states the columns must be added as fields.  I added this with visible(false) and the same for the columns but those fields do not get exported.  The Read() method of the datasource is returning all the columns but only a select few are showing by design.
Alex Hajigeorgieva
Telerik team
 answered on 06 Nov 2020
1 answer
119 views

Hello,

 

I use Nuget AspNet.Core (2020.1.406) but "Html.Kendo().TileLayout()" is not found...

 

Thanks

Nathan

Tsvetomir
Telerik team
 answered on 06 Nov 2020
17 answers
2.2K+ views

Do you have sample code that would allow me to upload a spreadsheet and read it, looping through each row and column using built-in functions/procedures from Telerik UI for ASP.NET?

I see you have samles in: http://demos.telerik.com/aspnet-core/spreadsheet/index. None of them though show how to upload the file and read the file using Telerik UI for ASP.net. Please advise

 

 

 

Heiko
Top achievements
Rank 1
Iron
Veteran
 answered on 05 Nov 2020
6 answers
222 views

Hello,

The generation of the identifier in TagHelpers is different from HtmlHelpers. The dot is not replaced by underscore :

<input asp-for="SubModel.Name" /> generates SubModel_Name
@Html.Kendo().AutoCompleteFor(m => m.SubModel.Name) generates SubModel_Name
<kendo-autocomplete for="SubModel.Name"></kendo-autocomplete> generates SubModel.Name

 

Is there an option to replace dot with underscore in TagHelpers ?

Cordially,
Stephane.

Aaron
Top achievements
Rank 1
Veteran
 answered on 04 Nov 2020
1 answer
774 views

Hi everyone,

 

I have a page with two grids on the page and each grid has grouping.  I want to collapse the groups in both grids and also allow the user to click on the labels to expand and collapse the groups.  I am using version 2020.2.513

So what is happening is that grid 1 is collapsing as expected, but grid 2 is not collapsing at all.  What do I have wrong?

My code is below:

Grid 1

@(Html.Kendo().Grid<VwFormSubmissionMenuListActive>()
    .Name("ActiveForms")
    .Groupable()
    .Columns(columns =>
    {
        columns.Bound(p => p.FormSubmissionId).Hidden(true);
        columns.Bound(p => p.FormName).Title("Form Name").Width(200).Hidden(true);
        columns.Bound(p => p.SubjectName).Title("Subject").Width(200).MinScreenWidth(800);
        columns.Group(group => group
            .Title("Form Agreement")
            .Columns(info =>
            {
                info.Bound(x => x.AgreementRequired).Title("Required").Width(75);
                info.Bound(x => x.AgreementStatusDescription).Title("Status").Width(75);
            })
        );
        columns.Bound(p => p.AgreementStatusId).Hidden(true);
    })
    .ToolBar(toolbar =>
    {
        toolbar.Search();
    })
    .HtmlAttributes(new { style = "height:650px;" })
    .Navigatable()
    .Selectable(selectable => selectable.Mode(GridSelectionMode.Single))
    .Sortable()
    .Groupable(true)
    .Events(events => events.DataBound("collapseGroupRows_Forms"))
    .Events(ev => ev.Change("onChange"))
    .Scrollable()
    .DataSource(dataSource => dataSource
        .Ajax()
        .ServerOperation(false)
        .GroupPaging(true)
        .Events(events => events.Error("error_handler"))
        .Model(model => model.Id(p => p.FormSubmissionId))
        .Read("vwFormSubmissionMenuList_Active", "Grid", new { StudentId = -1 })
        .Group(x =>
        {
            x.Add(y => y.FormName);
        })
    )
 
)

 

Grid 2

@(Html.Kendo().Grid<VwSubjectChange>()
    .Name("SubjectChange")
    .Groupable()
    .Columns(columns =>
    {
        columns.Bound(p => p.SubjectChangeId).Hidden(true);
        columns.Bound(p => p.Timetable).Title("Timetable").Width(200).Hidden(true);
        columns.Bound(p => p.Surname).Title("Surname").Width(100);
        columns.Bound(p => p.Preferred).Title("Preferred").Width(100).MinScreenWidth(800);
        columns.Bound(p => p.Yearlevel).Title("Current Year").Width(50);
        columns.Bound(p => p.Studentnumber).Title("Student Id").Width(50);
    })
    .ToolBar(toolbar =>
    {
        toolbar.Search();
    })
    .HtmlAttributes(new { style = "height:650px;" })
    .Navigatable()
    .Selectable(selectable => selectable.Mode(GridSelectionMode.Single))
    .Sortable()
    .Groupable(true)
    .Events(events => events.DataBound("collapseGroupRows_SubjectChange"))
    .Scrollable()
    .DataSource(dataSource => dataSource
        .Ajax()
        .ServerOperation(false)
        .GroupPaging(true)
        .Events(events => events.Error("error_handler"))
        .Model(model => model.Id(p => p.SubjectChangeId))
        .Read("VwSubjectChange", "Grid", new { username = @User.Identity.Name })
        .Group(x =>
        {
            x.Add(y => y.Timetable);
            x.Add(y => y.CurrentStatus);
        })
    )
 
)

 

Javascript code:

function collapseGroupRows_SubjectChange() {
    var grid = $("#SubjectChange").data("kendoGrid");
 
    $(".k-grouping-row").each(function (e) {
        var expanded = $(this).find(".k-i-collapse").length > 0;
 
        if (expanded) {
            grid.collapseGroup(this);
        }
        else {
            grid.expandGroup(this);
        }
 
        //grid.collapseGroup(this);
    });
 
    $(".k-grouping-row").click(function () {
        var expanded = $(this).find(".k-i-collapse").length > 0;
 
        if (expanded) {
            grid.collapseGroup(this);
        }
        else {
            grid.expandGroup(this);
        }
    });
 
}
 
function collapseGroupRows_Forms() {
 
    var grid = $("#ActiveForms").data("kendoGrid");
     
    $(".k-grouping-row").each(function (e) {
        var expanded = $(this).find(".k-i-collapse").length > 0;
 
        if (expanded) {
            grid.collapseGroup(this);
        }
        else {
            grid.expandGroup(this);
        }
 
    });
 
    $(".k-grouping-row").click(function () {
        var expanded = $(this).find(".k-i-collapse").length > 0;
 
        if (expanded) {
            grid.collapseGroup(this);
        }
        else {
            grid.expandGroup(this);
        }
    });
}

 

 

 

Tsvetomir
Telerik team
 answered on 04 Nov 2020
8 answers
1.5K+ views

I want to send the token and additional data on my update call.

Something like the below, is this possible? Do i even need the token for an intranet app? If not, how do I get rid of it?

Javascript

function additionalInfo() {
        return {
            token: kendo.antiForgeryTokens(),
            whatChanged: 2
        }
    }

 

PageModel 

   public JsonResult OnPostUpdate([DataSourceRequest] DataSourceRequest request, OCHODisplayReply reply, int whatChanged) {
 
            if (reply != null && ModelState.IsValid) {
                       /...
              }
}

 

Grid method

.Update(u => u.Url("/Index/?handler=Update").Data("additionalInfo")
Anton Mironov
Telerik team
 answered on 04 Nov 2020
2 answers
151 views

How do I include and populate a ComboBox inside a Grid template?  I have it list my Templates successfully as defined.  But, I need a ComboBox that lists the Template's Items.  The data is served up from the Model.

Then, on selection of the items in the ComboBox, I need to store the Item index to a local array/list (because we don't know how many templates there are) for consumption on a button press.

Template:

public partial class SessionOptionTemplate
{
    public int Id { get; set; }
 
    [MaxLength(50)]
    public string Name { get; set; }
    [MaxLength(128)]
    public string Description { get; set; }
 
    public int Order { get; set; }
 
    public DateTime AddTimestamp { get; set; } = DateTime.UtcNow;
    public DateTime? DeactivateTimestamp { get; set; }
 
    public ICollection<SessionOptionItem> SessionOptionItems { get; set; } = new HashSet<SessionOptionItem>();
}

Items:

public partial class SessionOptionItem
{
    [Key]
    public int Id { get; set; }
    public int SessionOptionTemplateId { get; set; }
 
    [MaxLength(50)]
    public string Name { get; set; }
    [MaxLength(128)]
    public string Description { get; set; }
 
    public DateTime AddTimestamp { get; set; } = DateTime.UtcNow;
    public DateTime? DeactivateTimestamp { get; set; }
}

 

Grid:

@(Html.Kendo().Grid((IEnumerable<SessionOptionTemplate>)Model.SessionOptionTemplates)
    .Name("template-grid")
    .HtmlAttributes(new { @class = "GridNoHeader" })
    .Columns(columns =>
    {
        columns.Template(" ").Title("Name").Width(200);
    })
    .ClientRowTemplate(@"
        <div style='margin-bottom: 10px;'>
            <input class='select' type='checkbox' #=IsSelected ? " + @"checked='checked' " + @" : '' # />
            <span class='name'>#: Name #</span><br />
            <span class='desc'>#: Description #</span>
        </div>")
    .DataSource(dataSource => dataSource
        .Ajax()
        .PageSize(20)
        .ServerOperation(false))
    )
Georgi Denchev
Telerik team
 answered on 03 Nov 2020
1 answer
108 views

I need to create a filtering mechanism and I'm attempting to figure out the best way to do it.  Yes, I have a post to the Filter forum... but I'm likely going to be told that it is more complex than what the users will want.  So, I have a menu bound to a collection of user-defined Templates as shown.  Each Template has multiple Items as bound to the children/sub-menu.

As the user selects options from this menu, I need to retain the Child Item's Id in order to build a Filter set that I can submit to a REST service.  Because the menu will not provide feedback like your Filter control, I'll need to display the filter in a field that'll grow as they add criteria much like the "ExpressionPreview" on the Filter control.

Template:

public partial class SessionOptionTemplate
{
    public int Id { get; set; }
 
    [MaxLength(50)]
    public string Name { get; set; }
    [MaxLength(128)]
    public string Description { get; set; }
 
    public int Order { get; set; }
 
    public DateTime AddTimestamp { get; set; } = DateTime.UtcNow;
    public DateTime? DeactivateTimestamp { get; set; }
 
    public ICollection<SessionOptionItem> SessionOptionItems { get; set; } = new HashSet<SessionOptionItem>();
}

Item:

public partial class SessionOptionItem
{
    [Key]
    public int Id { get; set; }
    public int SessionOptionTemplateId { get; set; }
 
    [MaxLength(50)]
    public string Name { get; set; }
    [MaxLength(128)]
    public string Description { get; set; }
 
    public DateTime AddTimestamp { get; set; } = DateTime.UtcNow;
    public DateTime? DeactivateTimestamp { get; set; }
}

Menu:

@model IEnumerable<SessionOptionTemplate>
 
@(Html.Kendo().Menu()
    .Name("Menu")
    .Scrollable(true)
    .BindTo(Model, mappings =>
    {
        mappings.For<SessionOptionTemplate>(binding => binding
            .ItemDataBound((item, template) =>
            {
                item.Text = template.Name;
            })
            .Children(category => category.SessionOptionItems));
                mappings.For<SessionOptionItem>(binding => binding
                .ItemDataBound((item, option) =>
                {
                    item.Text = option.Name;
                }));
    }))

 

 

 

 

 

Petar
Telerik team
 answered on 03 Nov 2020
Narrow your results
Selected tags
Tags
+? more
Top users last month
Will
Top achievements
Rank 2
Iron
Motti
Top achievements
Rank 1
Iron
Hester
Top achievements
Rank 1
Iron
Bob
Top achievements
Rank 3
Iron
Iron
Veteran
Thomas
Top achievements
Rank 2
Iron
Want to show your ninja superpower to fellow developers?
Top users last month
Will
Top achievements
Rank 2
Iron
Motti
Top achievements
Rank 1
Iron
Hester
Top achievements
Rank 1
Iron
Bob
Top achievements
Rank 3
Iron
Iron
Veteran
Thomas
Top achievements
Rank 2
Iron
Want to show your ninja superpower to fellow developers?
Want to show your ninja superpower to fellow developers?