I was creating a Kendo grid that contains several column. There is one numeric column called 'Length". When I clicked on this column, I would expect it to invoke the editor, but unfortunately it crashed in kendo.all.js. I have no idea what I did wrong. I am hoping someone here could take a look at it and give me some advice on how to fix my code.
Here is a sample of my code:
http://jsbin.com/wikav/1/edit
Thanks in advance.
Here is a sample of my code:
http://jsbin.com/wikav/1/edit
Thanks in advance.
2 Answers, 1 is accepted
0
Jayesh Goyani
Top achievements
Rank 2
answered on 03 May 2014, 05:39 AM
Hello,
I have updated your EDIT function.
Let me know if any concern.
Thanks,
Jayesh Goyani
I have updated your EDIT function.
<!DOCTYPE html>
<
html
>
<
head
>
<
title
>Test</
title
>
<
link
href
=
"http://cdn.kendostatic.com/2014.1.318/styles/kendo.common.min.css"
rel
=
"stylesheet"
/>
<
link
href
=
"http://cdn.kendostatic.com/2014.1.318/styles/kendo.default.min.css"
rel
=
"stylesheet"
/>
<
script
src
=
"http://code.jquery.com/jquery-1.9.1.min.js"
></
script
>
<
script
src
=
"http://cdn.kendostatic.com/2014.1.318/js/kendo.all.min.js"
></
script
>
<
script
>
$(document).ready(function () {
var workTasks = [
{ "Id": 1, "TaskName": "Test1",
"TaskType": "PowershellTask", "Length": 2, "Data": "Some Data"
},
{ "Id": 2, "TaskName": "Test2",
"TaskType": "BuildTask", "Length": 1, "Data": "Some Data"
},
{ "Id": 3, "TaskName": "Test3",
"TaskType": "PowershellTask", "Length": 3, "Data": "Some Data"
},
{ "Id": 4, "TaskName": "Other",
"TaskType": "BuildTask", "Length": 5, "Data": "Some Data"
}
];
var taskTypes = ['PowershellTask', 'BuildTask'];
var dataSource = new kendo.data.DataSource({
transport: {
read: function (o) {
o.success(workTasks);
},
update: function (o) {
o.success(workTasks);
},
destroy: function (o) {
o.success();
},
create: function (o) {
o.success(workTasks);
},
parameterMap: function (data, operation) {
if (operation != "read") {
var result = {};
for (var i = 0; i <
data.models.length
; i++) {
var
setting
=
data
.models[i];
for (var member in setting) {
result["tasks[" + i + "]." + member] = setting[member];
}
}
return result;
} else {
return JSON.stringify(data);
}
},
serverPaging: false,
serverFiltering: false
},
batch: true,
schema: {
model: {
id: "Id",
fields: {
TaskName: { editable: true },
TaskType: {
editable: true,
defaultValue: "BuildTask",
validation: { required: true }
},
Length: {
type: "number",
editable: true
},
Data: { editable: true },
ToDelete: { type: "boolean" }
}
}
},
error: function (e) {
if (e.errors !== false) {
$("#apiResult").text("Error from server: " + res.Error).css("color", "red");
// This will keep the popup open
grid.one("dataBinding", function (e) {
e.preventDefault(); // cancel grid rebind
});
}
}
});
var grid = $("#WorkTasksGrid").kendoGrid({
dataSource: dataSource,
scrollable: false,
editable: {
mode: "incell",
confirmation: false
},
resizable: true,
toolbar: kendo.template($("#template").html()),
sortable: true,
pageable: {
numeric: false,
previousNext: false,
messages: {
display: "Total: {2}"
}
},
columns: [
{ field: "Id" },
{ field: "TaskName", title: "Name" },
{ field: "TaskType", title: "Type", editor: taskTypeDropDownEditor },
{ field: "Length" },
{ field: "Data" },
{
field: "ToDelete", title: "Delete",
width: "7%",
template: '<input
name
=
"ToDelete"
class
=
"check_row"
type
=
"checkbox"
#=(ToDelete)?"checked":""# /><
div
style
=
"float: right; width: 100%"
/>',
sortable: false
}
],
edit: function (e) {
var fieldName;
if (e.container.find("input").length > 1) {
for (var i = 0; i <
e.container.find
("input").length; i++) {
fieldName
= e.container.find("input")[i].attr("name");
if (typeof fieldName == 'undefined' || fieldName === 'ToDelete') {
}
else {
break;
}
}
}
else {
fieldName
= e.container.find("input").attr("name");
}
if (typeof fieldName == 'undefined' || fieldName === 'ToDelete') {
this.closeCell();
}
// set the default Id when adding a new row
if (e.model.isNew()) {
if (e.model.Id <= 0) {
var
maxId
=
Math
.max.apply(Math, dataSource.data().map(function (o) { return o.Id; }));
e.model.set("Id", maxId + 1);
}
}
},
saveChanges: function (e) {
// find all the deleted rows
var
updatedRowCount
=
GetUpdatedRowCount
(dataSource);
var
checkedRows
=
GetCheckedRow
();
var
numChanges
=
updatedRowCount
+ checkedRows.length;
if (numChanges <= 0) {
alert('No pending change is found');
}
else {
if (confirm(numChanges + ' pending change(s) found. Do you want to submit them?')) {
// delete checked rows
if (checkedRows.length > 0) {
checkedRows.forEach(function (val) {
grid.removeRow(val);
});
}
}
else {
e.preventDefault();
}
}
}
}).data("kendoGrid");
var nameFilterTextBox = $(".toolbar #NameFilter");
nameFilterTextBox[0].oninput = function () {
ApplyFilters(dataSource);
};
var showUpdadtedCheckBox = $(".toolbar #ShowUpdatedCheckBox");
showUpdadtedCheckBox.click(function () {
ApplyFilters(dataSource);
});
grid.tbody.on("change", ".check_row", function (e) {
var row = $(e.target).closest("tr");
var item = grid.dataItem(row);
item.ToDelete = ($(e.target).is(":checked") ? true : false);
});
// Apply all existing filters
function ApplyFilters(ds) {
var mainFilter = [];
var textFilter = [];
var deleteFilter = { field: "ToDelete", operator: "eq", value: true };
// Construct the text filter
$text = nameFilterTextBox.val();
if ($text.length > 0) {
textFilter = { logic: "or", filters: [] };
textFilter.filters.push({ field: "TaskName", operator: "contains", value: $text });
textFilter.filters.push({ field: "TaskType", operator: "contains", value: $text });
}
// Show updated rows only
var toShowUpdated = showUpdadtedCheckBox.is(':checked');
if (toShowUpdated) {
GetCheckedRow();
mainFilter = { logic: "or", filters: [] };
mainFilter.filters.push(deleteFilter);
mainFilter.filters.push(textFilter);
}
else {
mainFilter = textFilter;
}
ds.filter(mainFilter);
}
// Get the number of updated rows
function GetUpdatedRowCount(ds) {
var updateCount = 0;
$.each(ds._data, function () {
this.ToUpdate = this.dirty;
if (this.ToUpdate) {
updateCount++;
}
});
return updateCount;
}
// Get the number of checked rows
function GetCheckedRow() {
var checkedRows = [];
var checkBoxs = $("#WorkTasksGrid").find("input.check_row");
checkBoxs.each(function () {
var row = $(this).closest('tr');
if (this.checked) {
checkedRows.push(row);
}
});
return checkedRows;
}
function taskTypeDropDownEditor(container, options) {
var fieldName = options.field;
$('<
input
name
=
"' + fieldName + '"
data-bind
=
"value:' + fieldName + '"
/>')
.appendTo(container)
.kendoDropDownList({
dataSource: taskTypes
});
}
});
</
script
>
<
script
type
=
"text/x-kendo-template"
id
=
"template"
>
<
div
class
=
"toolbar k-toolbar k-grid-toolbar"
>
<
span
>
<
label
class
=
"filter-label"
>Filter:</
label
>
<
input
id
=
"NameFilter"
class
=
"k-textbox"
style
=
"width: 250px"
type
=
"text"
/>
</
span
>
<
span
style
=
"float: right; clear: both"
>
<
button
class
=
"k-button k-button-icontext k-grid-add"
><
span
class
=
"k-icon k-add"
></
span
>Add New Task</
button
>
<
button
class
=
"k-button k-button-icontext k-grid-save-changes"
><
span
class
=
"k-icon k-update"
></
span
>Submit Changes</
button
>
</
span
>
</
div
>
</
script
>
</
head
>
<
body
>
<
div
>
<
span
id
=
"apiResult"
></
span
>
<
h2
>
WorkTasks</
h2
>
<
p
>
*Click cell to edit</
p
>
<
div
id
=
"WorkTasksGrid"
>
</
div
>
<
br
/>
<
div
id
=
"Message"
>
</
div
>
</
div
>
</
body
>
</
html
>
Let me know if any concern.
Thanks,
Jayesh Goyani
0
Chuen
Top achievements
Rank 1
answered on 03 May 2014, 06:13 AM
Thank you, Jayesh.
Didn't realize that the problem was at the edit function. You nailed it good!
Didn't realize that the problem was at the edit function. You nailed it good!