I have inherited some code to fix what should have been a validation issue. I believe the best fix would be to change the field type in the grid to be a dropdown. At issue is changing the field to a drop down. As seen below, the last developer is creating a grid through JavaScript. This function is called from another JavaScript function which was called from an change event of another grid. Below is the code from the two involved scripts. I have attached a file containing all the other pertinent files to draw conclusions of the functionality that is in place. I want to replace the field "EXPLANATION_CODE" near below with a drop down sourced from a database table but still bounded as it is currently. I would think this should be rather simple but is beyond my current understanding. Also, I am not authorized to change how the grid is currently coded. So I cannot remove it from the function and place it in the view. I can only change the type of the field. Any and all help would be greatly appreciated. If after reviewing the functionality, you see a better way to perform all the required functionality, please forward thoughts. I may be able to refactor later to remove this hideous monstrosity.
/* Following function is in a separate script file and is called from another function */
function SendDocTranInfoToServer(pDocId, pDocSeq) {
if ($("#kGridExplanations").data("kendoGrid") == null) {
$("#kGridExplanations").kendoGrid({
columns: [
{ field: "EXPLANATION_CODE", title: "Code", width: "200px" },
{ command: "destroy" }
],
editable: {
createAt: "top"
},
toolbar: ["create"]
});
} else {
var saveExplanations = "";
var expGrid = $("#kGridExplanations").data("kendoGrid");
var expGridDs = $("#kGridExplanations").data("kendoGrid").dataSource;
var allData = expGridDs.data();
for (var i = 0; i < allData.length; i++) {
saveExplanations = saveExplanations + allData[i].EXPLANATION_CODE + "|";
}
$.ajax({
url: "/Inquiry/SetExplanationCodeAndText",
dataType: "json",
type: "POST",
data: { docId: $("#hdPrevDocId").val(), docCount: $("#hdPrevDocCount").val(), expCode: saveExplanations, filingText: $("#tbTextFiling").val() },
success: function (response) {
}
});
expGrid.dataSource.data([]);
$("#tbDocCountFiling").val("");
$("#tbTextFiling").val("");
}
$("#hdPrevDocId").val(pDocId);
$("#hdPrevDocCount").val(pDocSeq);
var explanationCodes = [];
$.ajax({
url: "/Inquiry/GetExplanationCodeByCount",
dataType: "json",
type: "POST",
data: { docId: pDocId, docCount: pDocSeq },
success: function (response) {
if (response.hasError) {
}
if (!response.hasError) {
for (var i3 = 0; i3 < response.length; i3++) {
var explanationCode = {
EXPLANATION_CODE: response[i3].EXPLANATION_CODE,
DOC_COUNT: response[i3].DOC_COUNT,
};
explanationCodes.push(explanationCode);
}
if (explanationCodes.length == 0) {
if ($("#kGridExplanations").data("kendoGrid") != null) {
$("#kGridExplanations").data("kendoGrid").dataSource.data([]);
}
} else {
var dsExpCode = new kendo.data.DataSource({
schema: {
model: {
fields: {
EXPLANATION_CODE: { type: "string" },
}
},
parse: function (response) {
return explanationCodes;
}
}
});
if ($("#kGridExplanations").data("kendoGrid") != null) {
var grid1 = $("#kGridExplanations").data("kendoGrid");
grid1.setDataSource(dsExpCode);
}
}
}
}
});
}
/* Following function from view holding a separate grid and used for the change event */
function kGrdCDocTransChange(arg) {
var ar = arg;
var selectedRows = this.select();
var selectedDataItems = [];
for (var i1 = 0; i1 < selectedRows.length; i1++) {
var dataItem = this.dataItem(selectedRows[i1]);
selectedDataItems.push(dataItem);
}
SendDocTranInfoToServer(selectedDataItems[0].DOC_ID, selectedDataItems[0].DOC_COUNT);
}
/* Following function is in a separate script file and is called from another function */
function SendDocTranInfoToServer(pDocId, pDocSeq) {
if ($("#kGridExplanations").data("kendoGrid") == null) {
$("#kGridExplanations").kendoGrid({
columns: [
{ field: "EXPLANATION_CODE", title: "Code", width: "200px" },
{ command: "destroy" }
],
editable: {
createAt: "top"
},
toolbar: ["create"]
});
} else {
var saveExplanations = "";
var expGrid = $("#kGridExplanations").data("kendoGrid");
var expGridDs = $("#kGridExplanations").data("kendoGrid").dataSource;
var allData = expGridDs.data();
for (var i = 0; i < allData.length; i++) {
saveExplanations = saveExplanations + allData[i].EXPLANATION_CODE + "|";
}
$.ajax({
url: "/Inquiry/SetExplanationCodeAndText",
dataType: "json",
type: "POST",
data: { docId: $("#hdPrevDocId").val(), docCount: $("#hdPrevDocCount").val(), expCode: saveExplanations, filingText: $("#tbTextFiling").val() },
success: function (response) {
}
});
expGrid.dataSource.data([]);
$("#tbDocCountFiling").val("");
$("#tbTextFiling").val("");
}
$("#hdPrevDocId").val(pDocId);
$("#hdPrevDocCount").val(pDocSeq);
var explanationCodes = [];
$.ajax({
url: "/Inquiry/GetExplanationCodeByCount",
dataType: "json",
type: "POST",
data: { docId: pDocId, docCount: pDocSeq },
success: function (response) {
if (response.hasError) {
}
if (!response.hasError) {
for (var i3 = 0; i3 < response.length; i3++) {
var explanationCode = {
EXPLANATION_CODE: response[i3].EXPLANATION_CODE,
DOC_COUNT: response[i3].DOC_COUNT,
};
explanationCodes.push(explanationCode);
}
if (explanationCodes.length == 0) {
if ($("#kGridExplanations").data("kendoGrid") != null) {
$("#kGridExplanations").data("kendoGrid").dataSource.data([]);
}
} else {
var dsExpCode = new kendo.data.DataSource({
schema: {
model: {
fields: {
EXPLANATION_CODE: { type: "string" },
}
},
parse: function (response) {
return explanationCodes;
}
}
});
if ($("#kGridExplanations").data("kendoGrid") != null) {
var grid1 = $("#kGridExplanations").data("kendoGrid");
grid1.setDataSource(dsExpCode);
}
}
}
}
});
}
/* Following function from view holding a separate grid and used for the change event */
function kGrdCDocTransChange(arg) {
var ar = arg;
var selectedRows = this.select();
var selectedDataItems = [];
for (var i1 = 0; i1 < selectedRows.length; i1++) {
var dataItem = this.dataItem(selectedRows[i1]);
selectedDataItems.push(dataItem);
}
SendDocTranInfoToServer(selectedDataItems[0].DOC_ID, selectedDataItems[0].DOC_COUNT);
}