Hi,
I have a few columns defined that I don't want the user to change.
When they click a button, it calls a service which returns data. I want to update the columns with this data.
The problem is, if they're set to read-only, I can't change them, and the databound event never fires
.Events(e => e.DataBound("dataBound"))
.DataSource(dataSource => dataSource
.Ajax()
.Batch(true)
.Events(events => events.Error("error_handler"))
.Model(model =>
{
model.Id(p => p.SnapshotDefinitionID);
//model.Field(p => p.NextSnapshotQueueID).Editable(false);
//model.Field(p => p.NextSnapshotQueueTime).Editable(false);
model.Field(p => p.LastSnapshotQueueID).Editable(false);
model.Field(p => p.LastSnapshotQueueTime).Editable(false);
model.Field(p => p.NextScheduleID).Editable(false);
model.Field(p => p.NextScheduleTime).Editable(false);
model.Field(p => p.LastScheduleID).Editable(false);
model.Field(p => p.LastScheduleTime).Editable(false);
model.Field(p => p.SnapshotQueueCount).Editable(false);
model.Field(p => p.ScheduleCount).Editable(false);
//model.Field(p => p.Client).DefaultValue(
// ViewData["defaultClient"] as DropDownListViewModel);
})
.Create(update => update.Action("BulkCreate", "SnapshotDefinition"))
.Read(read => read.Action("BulkRead", "SnapshotDefinition", new { clientId = @Request["ClientID"], snapshotDefinitionID = @Request["SnapshotDefinitionID"] }))
.Update(update => update.Action("BulkUpdate", "SnapshotDefinition"))
.Destroy(update => update.Action("BulkDestroy", "SnapshotDefinition"))
function createSnapshot(e) {
window.grid = $("#grid").data("kendoGrid");
window.dataItem = window.grid.dataItem($(event.srcElement).closest("tr"));
//alert(grid);
if (dataItem.NextSnapshotQueueID && dataItem.NextSnapshotQueueID != 0 && dataItem.CurrentPercentageComplete == 0) {
$.ajax({
url: "/SnapshotQueue/CancelSnapshotQueue",
//send current record ID to the server
data: { SnapshotQueueID: dataItem.NextSnapshotQueueID },
success: function (data) {
//update the current dataItem with the received data from the server
window.dataItem.set('NextSnapshotQueueID', '0');
window.dataItem.set('NextSnapshotQueueTime', '');
}
});
} else {
if (dataItem.CurrentPercentageComplete == 0) {
$.ajax({
url: "/SnapshotDefinition/CreateSnapshot",
//send current record ID to the server
data: { SnapshotDefinitionID: window.dataItem.SnapshotDefinitionID },
success: function (data) {
//update the current dataItem with the received data from the server
if (data['NextSnapshotQueueID']) {
window.dataItem.set('NextSnapshotQueueID', data['NextSnapshotQueueID']);
window.dataItem.set('NextSnapshotQueueTime', kendo.parseDate(data['NextSnapshotQueueTime']));
}
//for (var property in data) {
// dataItem.set(property, data[property]);
//}
}
});
}
}
}
function dataBound(e) {
var rows = this.table.find("tr[role='row']");
for (var i = 0; i < rows.length; i++) {
var model = this.dataItem(rows[i]);
if (model.NextSnapshotQueueID != 0 && model.CurrentPercentageComplete == 0) {
$(rows[i]).find(".k-grid-CreateSnapshot").contents().last()[0].textContent = 'Cancel Queued Snapshot';
}
if (model.NextSnapshotQueueID != 0 && model.CurrentPercentageComplete != 0) {
$(rows[i]).find(".k-grid-CreateSnapshot").contents().last()[0].textContent = '';
$(rows[i]).find(".k-grid-CreateSnapshot").width(100);
$(rows[i]).find(".k-grid-CreateSnapshot").removeClass('k-button');
$(rows[i]).find(".k-grid-CreateSnapshot").kendoProgressBar({
value: model.CurrentPercentageComplete,
max: 100
});
}
}
}
When a user selects a row in my grid, I can get the dataItem from a button click as follows:
$("#viewApplicationBtn").on("click", function () {
var grid = $("#Grid").data("kendoGrid");
var gridData = grid.dataItem(grid.select());
What I would like to do from this point is post this back to my controller, let the MVC model binder map to my ViewModel, and then redirect to another view which is of that model type.
The roadblock I'm facing is that an ajax post won't accomplish this and I can't pass the properties in a Url.Action helper because there are too many
here is my ajax:
$.ajax({
type: "POST",
url: "@Url.Action("ValidateModel")",
datatype: "json",
contentType: "application/json",
data: JSON.stringify(gridData),
success: function(data) {
window.location.href = @Url.Action("Details", "GridController");
},
error: function(data) {
console.log("post failed");
}
});
So how can I use my grid selection to post to another view with a Model?
<div id="myDiv"></div>@(Html.Kendo().Window() .Draggable(true) .Resizable() .Width(300) .Name("myWindow") .AppendTo("myDiv") .Content("some content here") .Visible(false))<button id="myBtn" onclick="showWindow();">Show</button><style> #myDiv { position: absolute; top: 200px; right: 200px; }</style><script> function showWindow() { var window = $("#myWindow").data("kendoWindow"); window.open(); }</script>
How do I prevent the command buttons from wrapping in the command column on each of the grid rows? I want them to render in a straight, horizontal line even if they extend past the edge of the grid.
like this:
+ ---------------------------------------------------------+| column 1 | ... | column n | [btn1] [btn2] [btn3] [btn4] |+ ---------------------------------------------------------+instead of:
+ -------------------------------------------+| column 1 | ... | column n | [btn1] [btn2] || | | | [btn3] [btn4] |+ -------------------------------------------+I have used Kendo UI (version: "2014.1.416) as before, after I upgrade to "2015.1.408".
My browser console occur the following error: Uncaught TypeError: s.attr(...).kendoColumnSorter is not a function
Could anyone give me some suggestion ? Thanks you very much

Hi
I have created Kendo menu using Model binding and set the Area as shown below
@(Html.Kendo().Menu()
.Name("menu")
.BindTo(Model,mp=>
{
mp.For<MyModel>(binding => binding
.ItemDataBound((item, main) => {
item.Text = main.FormName;
if (main.ActionName != "")
{
item.Action(main.ActionName, main.ControllerName, new { area = main.AreaName });
// item.ActionName = main.ActionName;
// item.ControllerName = main.ControllerName;
}
})
.Children(main => main.Children));
})
)
Menus are loaded correctly with 2 levels and the actions are invoked from respective areas correctly. However for the parent node default action is set. Parent node is not assigned any action.
When Area is removed, the parent node does not have action. When setting area, parent node also gets Href
Warm Regards,
Veeralakshmi Jeyavelu