Hi,
I have a problem with DateTimePicker component on Update action on GridView.
In my model I've annotated the property with the following attributes:
[Required]
[DataType(DataType.Date)]
[Display(Name = nameof(MessageResources.DateSent), ResourceType = typeof(MessageResources))]
public DateTime DateSent { get; set; }
In the columns section of a gridview component custom formating is set up as following:
.Columns(columns =>
{
columns.Command(command => { command.Edit(); }).Width(100);
columns.Bound(x => x.DateSent)
.Format("{0: dd.MM.yyyy HH:mm:ss}")
.Title("Date Sent");
columns.Command(command => { command.Destroy(); }).Width(100);
})
And I have a custom pop-up form with the following syntax and format:
@(Html.Kendo().DateTimePickerFor(p => p.DateSent)
.Format("dd.MM.yyyy HH:mm")
.HtmlAttributes(new { @readonly = "readonly", @class = "form-control" }))
On put or post operations default value (01/01/0001 00:00:00) is sent to the controller. In case I made model property nullable and without required then this value is always null.
Hello,
I am upgrading my project to use the latest enhancements to the Grid control, and replacing some custom code that I had to write to accomplish something that the columns.Select() seems to do out of the box. The issue that I am having is that I need to get the selected rows from outside of the grid. My view page looks like this:
<div class="row">
<div class="col-xs-18 col-md-12">
@(Html.Kendo().Grid<OASISBlueSyncCore.Common.Models.CourseInformation>()
.Name("grid")
.Columns(columns =>
{
columns.Select().Width(50);
columns.Bound(p => p.Department).Width(140);
columns.Bound(p => p.CourseID).Width(120);
columns.Bound(p => p.BlockNumber).Width(100).Title("Block #");
columns.Bound(p => p.CourseName);
columns.Bound(p => p.EventStartDate).EditorTemplateName("Date").Format("{0:MM/dd/yyyy}").Width(200);
columns.Bound(p => p.EventEndDate).EditorTemplateName("Date").Format("{0:MM/dd/yyyy}").Width(200);
columns.Bound(p => p.EvalStartDate).EditorTemplateName("Date").Format("{0:MM/dd/yyyy}").Width(200);
columns.Bound(p => p.EvalEndDate).EditorTemplateName("Date").Format("{0:MM/dd/yyyy}").Width(200);
})
.ToolBar(toolbar => { toolbar.Custom().Text("Set Selected Evaluation Dates").HtmlAttributes(new { id = "setEvalDates", style = "float: right" }); })
.Events(ev => ev.DataBound("db"))
.Editable(editable => editable.Mode(GridEditMode.InCell))
.Sortable()
.Scrollable()
.Filterable()
.HtmlAttributes(new { style = "height:500px;" })
.DataSource(dataSource => dataSource
.Ajax()
.Batch(true)
.ServerOperation(false)
.Model(model => model.Id(p => p.Department + "-" + p.CourseID))
.Read(read => read.Action("Courses_Read", "CourseConfiguration"))
.Update(update => update.Action("Courses_Update", "CourseConfiguration"))
)
)
</div>
</div>
<div class="row">
<div class="col-xs-18 col-md-12">
@Html.Kendo().Button().Name("GenerateBlueFiles").HtmlAttributes(new { id = "generateBlueFiles", @class = "btn btn-default" }).Content("Generate Blue Files")
</div>
</div>
And then the javascript that gets called by the GenerateBlueFiles button is:
$("#generateBlueFiles").click(function (e) {
e.preventDefault();
var grid = $('#grid').data('kendoGrid');
var gridContents = grid._data;
var sel = grid.selectedKeyNames();
console.log(sel.join(", ")); //This writes out a blank line, even if I have one or more rows selected.
for (var x = 0; x < gridContents.length; x++) {
if (gridContents[x].Selected) {
var record = {
"Year": gridContents[x].Year,
"Selected": gridContents[x].Selected,
"Department": gridContents[x].Department,
"CourseID": gridContents[x].CourseID,
"BlockNumber": gridContents[x].BlockNumber,
"CourseName": gridContents[x].CourseName,
"EventStartDate": gridContents[x].EventStartDate,
"EventEndDate": gridContents[x].EventEndDate,
"EvalStartDate": gridContents[x].EvalStartDate,
"EvalEndDate": gridContents[x].EvalEndDate
}
selectedCourseInformation.push(record);
}
}
The example in the docs only shows getting the rows using the onChange method of the grid control. How do I accomplish something similar from outside of the grid control. Previously, I grabbed a handle on the grid control and interrogated the contents to see if my custom Selected column was set to true, but that doesn't work, and the selectedKeyNames() doesn't seem to work when I grab the handle to the grid from outside of the grid itself. If someone could point me in the right direction on getting the selected rows, I would appreciate it.
Thanks,
Mike
I have a Kendo UI MVC grid that I am trying to filter based on value of the drop down lists selected. The filtering can be on any combination of the 3 dropdownlists. I have created a javascript function to do the filtering on a change event, and I see the 3 different filters while looking in the console. However when it gets to the controller only the first filter value is used.
function filterChange() {
var ddlBranchValue = $("#DropDownListBranches").data("kendoDropDownList").text();
var ddlDoorValue = $("#DropDownListDoor").data("kendoDropDownList").text();
var ddlApplicationValue = $("#DropDownListApplication").data("kendoDropDownList").text();
var gridListFilter = { filters: [] };
var gridDataSource = $("#trailerGrid").data("kendoGrid").dataSource;
if ($.trim(ddlBranchValue).length > 0) {
gridListFilter.filters.push({ field: "Branch", operator: "eq", value: ddlBranchValue });
}
if ($.trim(ddlDoorValue).length > 0) {
gridListFilter.filters.push({ field: "Door_Type", operator: "eq", value: ddlDoorValue });
}
if ($.trim(ddlApplicationValue).length > 0) {
gridListFilter.filters.push({ field: "Class_Code", operator: "eq", value: ddlApplicationValue });
}
gridDataSource.filter(gridListFilter);
gridDataSource.read();
}
@(Html.Kendo().Grid<
Trailer
>()
.Name("trailerGrid")
.EnableCustomBinding(true)
.Columns(columns =>
{
columns.Bound(trailer => trailer.Branch).Width(40).Title("Location Name")
.ClientFooterTemplate("Units Available: #=count#")
.ClientGroupHeaderTemplate("Location Name: <
a
href
=
availability
-contact>#=value #</
a
> (Units Available: #=count#)");
//columns.Bound(trailer => trailer.Trailer_Id).Width(40);
columns.Bound(trailer => trailer.Model).Width(40);
columns.Bound(trailer => trailer.Length).Width(20);
columns.Bound(trailer => trailer.Door_Type).Width(20);
columns.Bound(trailer => trailer.Class_Code).Width(40).Title("Application");
columns.Bound(trailer => trailer.Super_Spec).Width(20);
columns.Bound(trailer => trailer.Major_Spec).Width(20);
})
//.Pageable(p => p.Numeric(false).PreviousNext(false))
.Sortable()
//.Scrollable(s => s.Height(200))
.Scrollable(sc => sc.Endless(true))
.Filterable(filterable => filterable
.Extra(false)
.Operators(operators => operators
.ForString(str => str.Clear()
.StartsWith("Starts with")
.IsEqualTo("Is equal to")
.IsNotEqualTo("Is not equal to")
)))
.Groupable()
.DataSource(dataSource => dataSource
.Ajax()
.Aggregates(aggregates => aggregates.Add(trailer => trailer.Branch).Count())
.Group(groups => groups.Add(trailer => trailer.Branch))
//.PageSize(20)
.Read(read => read.Url(Url.Content("/web-interface/trailers"))))
.Events(events => events.DataBound("dataBound")))
According to telerik the resize and expand of grid should works like in the link
https://docs.telerik.com/kendo-ui/controls/data-management/grid/how-to/Layout/resize-grid-when-the-window-is-resized
But this can not be used with the asp.net core wrapper.
I am using Scrollable(s => s.Height("auto")) that generates the configuration scrollable: { height: "auto" }, and what I need is not to be generated or scrollable: true
The unexpected behaviour can be viewed here: https://dojo.telerik.com/OTuTEQOf where every other refresh the grid has the expected size or its auto.
What is the alternative for asp.net core and of course for asp.net framework to have this functionality?
Hello,
So i have this template for a combobox which looks like this:
@model ManTime.Web.ViewModels.TimeReportProjectPropertiesViewModel
@(Html.Kendo().ComboBoxFor(m => m)
.DataValueField("ProjectId")
.DataTextField("ProjectCode")
.Filter("startswith")
.ClearButton(false)
.Suggest(true)
.AutoBind(false)
.BindTo(ViewData["projects"] as IEnumerable))
The ViewModel for the combobox looks like this:
public int ProjectId { get; set; }
public int InvoicingCompanyId { get; set; }
public string ProjectCode { get; set; }
public string InvoicingCompanyName { get; set; }
public string TimeReportApprover { get; set; }
I am displaying this in a grid with the following column structure:
@(Html.Kendo().Grid<TimeReportViewModel>()
.Name("TimeReportsGrid").HtmlAttributes(new { @class = "shadow-sm" })
.Columns(columns =>
{
columns.Command(command => command.Destroy().Text(" ").IconClass("fa fa-trash-alt")).Media("(min-width: 450px)").Width(100);
columns.Command(command => command.Custom("Copy").Text(" ").Click("copyRow").IconClass("fa fa-copy")).Media("(min-width: 768px)").Width(100);
columns.Bound(p => p.ApprovalStatus).Filterable(false).Width(150).Media("(min-width: 450px)");
columns.Bound(p => p.Date).Width(200).Media("(min-width: 450px)");
columns.Bound(p => p.TimeReportProjectProperties).Sortable(false).Filterable(false).Width(180).ClientTemplate("#=TimeReportProjectProperties.ProjectCode#").Media("(min-width: 450px)");
columns.Bound(p => p.InvoicingCompany).Width(250).Sortable(false).Filterable(false).ClientTemplate("#=TimeReportProjectProperties.InvoicingCompanyName#").Media("(min-width: 450px)");
columns.Bound(p => p.Days).Width(100).Sortable(false).Filterable(false).ClientTemplate("#=Days.Days#").Media("(min-width: 450px)");
columns.Bound(p => p.IsBillable).Width(150).Media("(min-width: 450px)");
columns.Bound(p => p.Comment).Media("(min-width: 450px)");
columns.Bound(p => p.Approver).Width(250).ClientTemplate("#=TimeReportProjectProperties.TimeReportApprover#").Media("(min-width: 450px)");
columns.Template("#=resColTemplate(data)#").Title("Time Report").Media("(max-width: 450px)").Width(350);
})
The column " columns.Bound(p => p.TimeReportProjectProperties)" is the combobox-template itself and when the value of this combobox changes it also changes the columns InvoicingCompany and Approver.
To achieve this i have an event for CellClose which refreshes the grid like this "$('#TimeReportsGrid').data('kendoGrid').refresh();". This then updates the values in the grid from the selected value in the clienttemplate combobox.
The problem is that whenever a combobox value is empty (selectedindex -1) it sets all of the comboboxes in the grid value to "object Object" whenever i click on them.
This won't happen if i don't refresh the grid. However i have to refresh the grid to get the updated values on columns InvoicingCompany and Approver when the combobox value changes and cell is closed (CellClosed).
Passing local data to the chart. I pass the following class to the model of the partial view:
public
class
DonutChartDetails
{
public
string
Name {
get
;
set
; }
public
string
Title {
get
;
set
; }
public
IEnumerable<DashValue> Items {
get
;
set
; }
public
Boolean ShowLabel {
get
;
set
; }
}
public
class
DashValue
{
[Key]
[Required]
[DisplayName(
"DashItem"
)]
public
string
category {
get
;
set
; }
[Required]
[DisplayName(
"DashValue"
)]
public
decimal
value {
get
;
set
; }
//[DisplayName("DashDetail")]
//public string dashDetail { get; set; }
}
Here's the code for the chart:
@model DonutChartDetails
<
div
style
=
"background-color:transparent;"
>
@(Html.Kendo().Chart(Model.Items)
.Name(Model.Name)
.Title(Model.Title)
.Legend(legend => legend.Position(ChartLegendPosition.Top)
)
.Series(series =>
{
series.Donut(model => model.value, model => model.category);
})
)
</
div
>
Any ideas as to why no data is showing... The Title is showing.
-Lester
Hi,
I have a few events on one day. In the month view, is there a way to control how many it shows? Also, where do I control what happens when I click the "..." to view more? Thank you.
I am using Kendo UI for ASP.NET Core along with Bootstrap 4 and running into an issue with the responsive layouts of the grid on mobile devices. Upon further investigation, it appears to be a bug as I can reproduce it on the Kendo demo site.
The problem: When using the Bootstrap-v4 theme from Kendo, on mobile views the grid pager does not responsively update for the limited width as it does with other themes.
To reproduce: (I'm using Chrome) Go to https://demos.telerik.com/aspnet-core/grid/index, ensure the "Default Theme" is selected, using developer tools, toggle the device toolbar. Notice on the mobile views that the grid pager is properly formed (image attached). Now, switch back to the desktop view, select the Bootstrap-v4 theme, and again use dev tools to switch to the mobile view. The pager has not updated to properly display in a responsive fashion for the mobile device width. (image attached)
Hi.
Trying to create a custom template for event editing using SchedulerEditableSettingsBuilder.TemplateName method but template seems to be ignored no matter what folder I put the template in.
page source:
@(Html.Kendo().Scheduler<Models.ScheduledTest>()
.Name(
"scheduler"
)
.AllDaySlot(
false
)
.CurrentTimeMarker(
true
)
.Date(
new
DateTime(2013, 6, 13))
.StartTime(
new
DateTime(2013, 6, 13, 10, 00, 00))
.EndTime(
new
DateTime(2013, 6, 13, 23, 00, 00))
.Editable(editable =>
{
editable.TemplateName(
"TestEditorTemplate"
);
})
.EventTemplateId(
"test-template"
)
.Height(600)
.Views(views =>
{
views.DayView();
views.WeekView(weekView => weekView.Selected(
true
));
views.MonthView();
})
.DataSource(d => d
.Events(e => e.Error(
"onError"
))
.Model(m =>
{
m.Id(f => f.TestId);
})
.Read(
"Read"
,
"Calendar"
)
.Create(
"Create"
,
"Calendar"
)
.Destroy(
"Destroy"
,
"Calendar"
)
.Update(
"Update"
,
"Calendar"
)
)
)
~/Pages/EditorTemplates/TestEditorTemplate.cshtml
@model Models.ScheduledTest
@using (Html.BeginForm())
{
<
div
class
=
"k-edit-label"
>
@(Html.LabelFor(model => model.Title))
</
div
>
<
div
data-container-for
=
"title"
class
=
"k-edit-field"
>
@(Html.TextBoxFor(model => model.Title, new { @class = "k-textbox", data_bind = "value:title" }))
</
div
>
}
But the template is not detected and default template is used.
Should I put the template in a different path, or is there a way to help the component detect the template?
The problem comes with Kendo helper which generates tag with same id. Eample:
<div id="myid"></div>
@(Html.Kendo().ListView<Odata.Client>()
.Name("myid")
.TagName("div")
bla-bla-bla
)
If I look in the browser I will find two tags with the id "myid" one defined by me and one extra generated.
The same happens with Html.Kendo().TabStrip() So I think it is general "feature".
With jquery version of the same functionality I can avoid this behaiviour ising $("#myid").kendoListView(...) and populate the tag which should be populated.
What is the solution in case of using helper on razor page?
...