I have an autocomplete and a grid where my intention is to push records from Autocomplete into the grid and save those records using grid's create action from there by invoking a method set in a custom button. Please look at the attached picture to get a clear idea of what my setup looks like.
My saveTerminalRow function doesn't work as expected. Please help.
<div>
@(Html.Kendo().AutoComplete()
.Name(
"terminalsAutoComplete"
)
.DataTextField(
"cmp_name"
)
// omitted for brevity
.Events(e => e.Select(
"onTerminalNameSelect"
))
)
</div>
<div>
@(Html.Kendo()
.Grid<ProjectName.TerminalOutOfState>()
.Name(
"manageTOSSqlRecordsGrid"
)
.Columns(columns =>
{
columns.Bound(c => c.TerminalOutOfStateID).Hidden();
columns.Bound(c => c.TerminalCompanyID).Title(
"Terminal ID"
).Width(60);
columns.Bound(c => c.CompanyID).Title(
"Region"
).ClientTemplate(
"#=CompanyName#"
).Width(40);
columns.Command(cmd =>
{
cmd.Edit();
cmd.Destroy();
cmd.Custom(
"Save"
).Visible(
"showSaveCommand"
).Click(
"saveTerminalRow"
);
}).Title(
"Action"
).Width(80);
})
.ToolBar(tbr =>
{
tbr.Create();
tbr.Custom().Text(
"Load the table"
);
})
.Editable(edt => edt.Mode(GridEditMode.PopUp).TemplateName(
"TOoSTemplate"
).CreateAt(GridInsertRowPosition.Top))
.DataSource(dataSrc => dataSrc
.Ajax()
.ServerOperation(
true
)
.PageSize(15)
.Model(mdl => mdl.Id(column => column.TerminalOutOfStateID))
.Create(update => update.Action(
"UpsertTerminalOoSRecordAsync"
,
"Configuration"
))
//omitted for brevity
)
.AutoBind(
false
)
)
</div>
My scripts are like follows:
<script>
//This will add the data from autocomplete into the grid.
function
onTerminalNameSelect(e) {
var
dataItem =
this
.dataItem(e.item);
var
terminalData = {
TerminalOutOfStateID: 0,
TerminalCompanyID: dataItem.cmp_id,
CompanyID: dataItem.region_id,
CompanyName: dataItem.region_name
};
var
grid = $(
"#manageTOSSqlRecordsGrid"
).data(
"kendoGrid"
);
grid.dataSource.add(terminalData);
}
//This is used to hide and show "Save" button to those rows that are not yet saved to Db.
function
showSaveCommand(dataItem) {
// show the Save button for the item with TerminalOutOfStateID =0
if
(dataItem.TerminalOutOfStateID == 0) {
return
true
;
}
else
{
return
false
;
}
}
//This is the method to save the inserted row into Db by calling the create action method. But this doesn't work:
function
saveTerminalRow(e) {
var
terminalData =
this
.dataItem($(e.currentTarget).closest(
"tr"
));
var
grid = $(
"#manageTOSSqlRecordsGrid"
).data(
"kendoGrid"
);
grid.saveRow();
}
</script>
These are the screenshots.