Hi,
I need to bind the datasource to ASP.NET MVC Scheduler dynamically. In my scenario, I have 5 dropdownlists. Users will select item from the dropdownlists and then click Search buton and the scheduler will load the result. How can I do that with javascript?
Please see the attached image.
@(Html.Kendo().Scheduler<
TaskViewModel
>()
.Name("schedulerJob")
.Date(new DateTime(2015, 8, 31))
.StartTime(new DateTime(2015, 8, 31, 7, 00, 00))
.Height(600)
.Views(views =>
{
views.TimelineView();
})
.Timezone("Etc/UTC")
.Group(group => group.Resources("Techs").Orientation(SchedulerGroupOrientation.Vertical))
.Resources(resource =>
{
resource.Add(m => m.TechName)
.Title("Techs")
.Name("Techs")
.DataTextField("emm_code")
.DataValueField("emm_code")
.DataSource(d => d.Read("Techs", "JOBS"));
})
.DataSource(d => d
.Model(m =>
{
m.Id(r => r.emm_code);
})
.Read("JobSchedule_Read", "JOBS")
.Create("JobSchedule_Create", "JOBS")
.Update("JobSchedule_Update", "JOBS")
.Destroy("JobSchedule_Delete", "JOBS")
)
)
public
JsonResult JobSchedule_Read([DataSourceRequest] DataSourceRequest request)
{
DateTime startDateTime;
DateTime endDateTime;
List<JscDet> JscDet = (List<JscDet>)Session[
"JobScheduleDateTime"
];
List<TaskViewModel> tasks =
new
List<TaskViewModel>();
foreach
(var item
in
JscDet)
{
startDateTime = SchedulerUtility.GetDateTimeFromSeconds(item.jsd_sch_date, item.jsd_sch_start_time);
endDateTime = SchedulerUtility.GetDateTimeFromSeconds(item.jsd_sch_date, item.jsd_sch_end_time);
tasks.Add(
new
TaskViewModel()
{
TaskID = item.jsd_jobno,
TechName = item.jsd_sch_assto,
emm_code = item.jsd_sch_assto,
Title =
"Job Title"
,
Start =
new
DateTime(startDateTime.Year, startDateTime.Month, startDateTime.Day, startDateTime.Hour, startDateTime.Minute, startDateTime.Second),
End =
new
DateTime(endDateTime.Year, endDateTime.Month, endDateTime.Day, endDateTime.Hour, endDateTime.Minute, endDateTime.Second),
Description =
"Description 101"
,
IsAllDay =
false
});
}
return
Json(tasks.ToDataSourceResult(request));
}
Thanks in advance
I have this multiselect on my asp.net mvc project
<
div
class
=
"demo-section user-selection"
>
<
h3
class
=
"title"
>1. Select one or more Users</
h3
>
@(Html.Kendo().MultiSelect()
.Name("customers")
.DataTextField("givenName")
.DataValueField("description")
//.Placeholder("No users selected")
.Events(events => events.Change("NewSelection"))
.DataSource(source =>
{
source.Read(read =>
{
read.Action("GetCustomers", "Home");
});
})
.Height(300)
//.HtmlAttributes(new { style = "width: 400px" })
.HeaderTemplate("<
div
class=\"dropdown-header dropdown_Users\">" +
"<
span
class=\"k-widget k-header\">Photo</
span
>" +
"<
span
class=\"k-widget k-header\">Contact info</
span
>" +
"</
div
>")
.ItemTemplate("<
span
class=\"k-state-default item-user userPic\"><
img
class=\"userPhoto\" src=\"" + @System.Configuration.ConfigurationManager.AppSettings["BaseUrl"] + "user/image?userIid=#:data.IID#\" /></
span
>" +
"<
span
class=\"k-state-default item-user \"><
h3
>#: data.givenName # #: data.sn #</
h3
><
p
>#: data.description #</
p
></
span
>")
)
</
div
>
the data i load is of 2000 users that then appear in the multiselect list with their photo, first and last name and role.
my problem is that the loading takes about 5 or 6 seconds, and when scrolling down the list it sometimes gets a bit "clunky"
.
Is there anyway to improve the loading of data maybe making it load in blocks of 200 users at a time , or another way of improving performance?
/Date(-62135568000000)/
01/23/2013 04:43 PM
@model IEnumerable<
KUI_CS_Test1.ROAMHostSvc.BatchHeader
>
@{
ViewBag.Title = "Kendo UI for MVC (C#) Test App";
}
<
h2
>Batch List</
h2
>
@(Html.Kendo().Grid(Model)
.Name("batchGrid")
.Sortable()
.Pageable()
.Filterable()
.Columns(columns =>
{
columns.Bound(b => b.BatchID)
.Width("200");
columns.Bound(b => b.Transmitted_DateTime)
.Width("15")
.Format("{0:MM/dd/yyyy hh:mm tt}")
.Title("Transmitted");
columns.Bound(b => b.Completed_DateTime)
.Width("15")
.Format("{0:MM/dd/yyyy hh:mm tt}")
.Title("Completed");
columns.Bound(b => b.Created_DTTM)
.Width("15")
.Format("{0:MM/dd/yyyy hh:mm tt}")
.Title("Created");
columns.Bound(b => b.Created_Emp_Name)
.Width("18")
.Title("Created By");
}
)
.ClientDetailTemplateId("transactions")
.Events(e => e.DetailInit("detailInit"))
.DataSource(dataSource => dataSource
.Ajax()
.Read(read => read.Action("FetchBatchList2", "Home"))
)
)
<
script
id
=
"transactions"
type
=
"text/kendo-tmpl"
>
@(Html.Kendo().Grid<
KUI_CS_Test1.ROAMHostSvc.TransactionBase
>()
.Name("Transactions_#=BatchID#")
.Columns( columns =>
{
columns.Bound(t => t.ID)
.Width("200")
.Title("Transaction ID");
columns.Bound(t => t.Version)
.Width("10")
.Title("Version");
columns.Bound(t => t.TranTypeDisplayText)
.Width("15")
.Title("Tran Type");
columns.Bound(t => t.PostingFlagDisplayText)
.Width("15")
.Title("Posting Flag");
columns.Bound(t => t.Posting_DTTM)
.Width("15")
.Format("{0:MM/dd/yyyy hh:mm tt}")
.Title("Posting Date/Time");
columns.Bound(t => t.PostingMessage)
.Width("300")
.Title("Posting Message");
})
.ToClientTemplate()
)
</
script
>
<
script
type
=
"text/javascript"
language
=
"javascript"
>
function detailInit(e) {
var grid = $("#Transactions_" + e.data.BatchID).data("kendoGrid");
grid.dataSource.data(e.data.TranCollection);
}
</
script
>
We are trying to implement kendo grid preserve state functionality.
Requirement is a grid state (filter, page etc) is already pre saved in the db
and every times page loads, we have to show grid with the pre saved state. We followed the example given in link ( http://www.telerik.com/support/code-library/save-grid-state-in-session-on-server-side ) and able to achieve the requirement in two steps.
Step 1: Load the page with default grid option
@(Html.Kendo().Grid<TelerikMvcApp1.Models.Product>()
.Name("grid")
.DataSource(ds
=> ds.Ajax().Read("Read", "Home"))
.Pageable()
.Groupable()
.Sortable()
.Reorderable(r
=> r.Columns(true))
.Resizable(r
=> r.Columns(true))
)
and then,
Step 2: on
document ready, make an ajax call , get the pre saved grid options , destroy
the existing grid and set the grid options
$(document).ready(function ()
{
var grid = $("#grid").data("kendoGrid");
var dataSource =
grid.dataSource;
$.ajax({
url: "/Home/Load",
success: function(state) {
state =
JSON.parse(state);
var options = grid.options;
options.columns = state.columns;
options.dataSource.page = state.page;
options.dataSource.pageSize
= state.pageSize;
options.dataSource.sort = state.sort;
options.dataSource.filter = state.filter;
options.dataSource.group = state.group;
grid.destroy();
$("#grid")
.empty()
.kendoGrid(options);
}
});
});
Problems with this approach are
I recently came across a strange issue happening with the kendo Scheduler regarding firing off change events.
I have a custom event handler set so that when a user clicks on an item in the Scheduler it opens a link to a separate details page (in a new tab). The problem is that after doing this, other (unrelated) UI elements in the Scheduler will fire off the exact same event when I click on them.
You can actually see this behavior on the Scheduler Events sample page here: http://demos.telerik.com/kendo-ui/scheduler/events
To replicate:
Click on the Month View button.
Click on (highlighting) the item "HR Lecture", on the 06th. This will fire off a Change event.
Now click on the Month View button again. In between the dataBinding and dataBound events, another Change event will fire off for the same time slot. (Prior to clicking on HR Lecture, this is not the case. You'll only see events for navigation, dataBinding, and dataBound events)
This doesn't seem to happen with all events, HR Lecture just appears to be one that *does* trigger the behavior.
Is this expected? If so, is there any way to prevent this from happening?
Hi all,
I am trying to display an object in a Kendo grid in a MVC Website, however this object contains a dictionary and it seems like the grid is unable serialize it.
This is the error message I am getting:
Type 'System.Collections.Generic.Dictionary`2[[ExactModels.SalesOrderLine, ExactModels, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null],[ExactModels.Item, ExactModels, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]' is not supported for serialization/deserialization of a dictionary, keys must be strings or objects.
I am using Kendo.Mvc.dll version 2015.2.902.545.
And this is the object which contains the dictionary that is causing the problem.
public class CustomOrder
{
[Key]
public Guid ID { get; set; }
//public SalesOrder salesOrder { get; set; }
private SalesOrder order;
public SalesOrder salesOrder
{
get { return order; }
set
{
order = value;
if (order != null)
{
this.ID = order.OrderID;
}
}
}
public Account account { get; set; }
public Dictionary<
SalesOrderLine
, Item> salesOrderLineItem { get; set; }
public Boolean Checked { get; set; }
}
Anyone any idea of how to fix this?
Thanks in advance.
Please find the below code as i want to set default value of dropdown instead of optionlable from JSON data which is returned
from controller .
Please find the below code
public ActionResult GetOrders()
{
List<usp_IDQ_GetLicenseDistrictsVO> objresult1 = new List<usp_IDQ_GetLicenseDistrictsVO>();
objresult1 = objConnection.usp_IDQ_GetLicenseDistricts(User.Identity.Name, true).ToList();
return Json(objresult1, JsonRequestBehavior.AllowGet); ;
}
@(Html.Kendo().DropDownList()
.Name("DropDownList1")
//.Events(ev => ev.DataBound("SalesPersonID_DataBound"))
.OptionLabel("Select ...")
.HtmlAttributes(new { style = "width:300px" })
.OptionLabel("Select ...")
.DataTextField("District_Id")
.DataValueField("Location_ID")
.DataSource(source =>
{
source.Read(read =>
{
read.Action("GetOrders", "IDTDashboard");
})
.ServerFiltering(true);
})
.AutoBind(false)