Hello everybody,
I need help about ClientTemplate usage cause I really can't solve this problem lookig for solution online.
My goal is:
1) To have the content of a grid saved inside a IEnumerable inside the model, and be able to submit the model (with populated IEnumerable)
2) To have a grid column that can contain different data filed ComboBox(), Numeric or string
For achiving goal 1 I'm tring following this exaple: https://github.com/telerik/ui-for-aspnet-mvc-examples/tree/master/grid/submit-grid-with-form
that use #index(data)# inside the ClientTemplate to save a value to the model ienumerable field,
but that give me an erro, for example using:
(@Html.Kendo().TextBox().Name("ParameterListForCycleTime[#index(data)#].Value")).ToClientTemplate()
function index(dataItem) {
var data = $("#wizardGrid").data("kendoGrid").dataSource.data();
return data.indexOf(dataItem);
}
when I try to access the page it gives me the error: index not defined, and I can't understand why.
As you can see in the code index function is defined in script..
2) If I avoid error of point 1 inserting a static 0 index instead of #index(data)# (or I use another Name) once i load the page I see only big textboxs. Clicking near them make them become what I defined in the ClientTemplate (Checkbox,numericBox or normal textbox): https://gyazo.com/7075e354d62758b4a2618f471d463757
(@Html.Kendo().NumericTextBox().Name("ParameterListForCycleTime[0]).Value(0)).ToClientTemplate()
Really hope somebody can help me cause I'm losing my mental sanity on this..
Thanks,
Gabriele
Here the full grid code:
@using (Html.BeginForm("Wizardpage1Result", "CycleTime"))
{
@(Html.Kendo().Grid(Model.ParameterListForCycleTime)
.Name("wizardGrid")
.Columns(columns =>
{
columns.Bound(p => p.ID).Width(180).EditorTemplateName("ReadOnlyTemplate");
columns.Bound(p => p.Description).Width(300).EditorTemplateName("ReadOnlyTemplate");
columns.Bound(p => p.UM).Width(100).EditorTemplateName("ReadOnlyTemplate");
columns.Bound(p => p.Mandatory).Title("Mandatory").Width(100).ClientTemplate("<
input
type
=
'checkbox'
#= Mandatory ?
checked
=
'checked'
:'' # />");
columns.Bound(p => p.Value).Title("Value").ClientTemplate(
"# if (Type == 'LIST') { #" +
(@Html.Kendo().ComboBox()
.Name("ParameterListForCycleTime[#index(data)#].Value")
.Placeholder("Select relationship...")
.DataTextField("Text")
.DataValueField("Value")
.BindTo(new List<
SelectListItem
>() {
new SelectListItem()
{
Text = "Option1",
Value = "1"
},
new SelectListItem()
{
Text = "Option2",
Value = "2"
},
new SelectListItem()
{
Text = "Option3",
Value = "3"
},
new SelectListItem()
{
Text = "Option4",
Value = "4"
}
}).Value("")).ToClientTemplate()
+ "# } else if (Type == 'NUMERIC') { #" +
(@Html.Kendo().NumericTextBox().Name("ParameterListForCycleTime[#index(data)#].Value").Value(0)).ToClientTemplate()
+ "# } else { #" +
(@Html.Kendo().TextBox().Name("ParameterListForCycleTime[#index(data)#].Value")).ToClientTemplate()
+ "# } #"
);
/*"#= Value #" + "<
input
type
=
'hidden'
name
=
'ParameterListForCycleTime[#= index(data)#].Value'
value
=
'#= Value #'
/>")*/
})
.ToolBar(toolbar =>
{
toolbar.Save();
})
.Editable(editable => editable.Mode(GridEditMode.InCell))
.Events(x => x.DataBound("onDataBound"))
.Navigatable()
.Sortable()
.Scrollable()
.DataSource(dataSource => dataSource
.Ajax().Group(g => g.Add(c => c.Category))
.Batch(true)
.ServerOperation(false)
.Model(model =>
{
model.Id(p => p.ID);
model.Field(p => p.ID).Editable(false);
model.Field(p => p.Description).Editable(false);
model.Field(p => p.UM).Editable(false);
model.Field(p => p.Mandatory).Editable(false);
model.Field(p => p.Value);
})
.Update("Wizard_Update", "CycleTime")
)
)
<
input
type
=
"submit"
value
=
"SaveModel"
/>
}
<
script
type
=
"text/javascript"
>
function index(dataItem) {
var data = $("#wizardGrid").data("kendoGrid").dataSource.data();
return data.indexOf(dataItem);
}
function onDataBound(e) {
var gridData = this.dataSource.view();
for (var i = 0; i <
gridData.length
; i++) {
var
currentUid
=
gridData
[i].uid;
var
currenRow
=
this
.table.find("tr[
data-uid
=
'" + currentUid + "'
]");
$(currenRow).find(".chkbxCliEditRights").attr("disabled", true);
}
$('#wizardGrid script').appendTo(document.body);
var item = $('#wizardGrid').data().kendoGrid.dataItem($(this.element).closest('tr'));
item.set('Value', this.value());
}
</script>