如何使用新数据更新 Bootgrid 选定的行
How to update Bootgrid selected rows with new data
我正在使用 jquery-bootgrid 位于此处。 http://www.jquery-bootgrid.com/GettingStarted
我创建了一个 bootgrid,其中有一个我想编辑的字段,所以我所做的就是在格式化程序中指定它。
formatters:
{
"fieldval": function(column, row)
{
return formatterForFieldval(column, row);
}
}
})
函数。
function formatterForFieldval(column, row)
{
return '<input type="text" class="form-control" id="usr" '
+ 'value="'+row.fieldval+'"'
+ '>' ;
}
这有效,它创建了一个我可以在运行时编辑的文本框。
现在下一步是保存修改后的数据。
我使用以下脚本获取用户修改的选定行。
function getSelectedRowsAsJson(tableId)
{
var selectedRowsArray =[];
var selectedRowsJsonArray = "";
var rows = $(tableId).bootgrid("getSelectedRows");
var arrayLength = rows.length;
for (var i = 0; i < arrayLength; i++)
{
var rowsc = $(tableId).bootgrid("getCurrentRows");
var arrayLengthCurrent = rowsc.length;
for (var ii = 0; ii < arrayLengthCurrent; ii++)
{
if(rows[i]===rowsc[ii].id)
{
selectedRowsArray.push(rowsc[ii])
}
}
}
selectedRowsJsonArray = JSON.stringify(selectedRowsArray);
console.log(selectedRowsJsonArray);
return selectedRowsJsonArray;
}
我的问题是 var rowsc = $(tableId).bootgrid("getCurrentRows");
没有更新到我在文本框中输入的修改后的数据。它仍然显示我修改文本框之前的旧数据(加载的数据)。
因此,当将行数组发送到数据库时,它会更新为相同的值。
修改文本框后如何更新 var rowsc = $(tableId).bootgrid("getCurrentRows");
?还是我做错了?
首先,根据我的经验(截至撰写本文时),getSelectedRows 仅 returns 所选列的主键。
我已经解决了你的问题。以下是您需要进行的修改:
1. 假设您的数据标识符列名称是 "pkcolumn":
function formatterForFieldval(column, row)
{
return '<input type="text" class="form-control" id="pk' + row.pkcolumn + '" value="'+ row.fieldval + '">'; //Notice I have prefixed the id with an arbitrary litteral "pk";
}
在上面的代码片段中,我们为每一行输入赋予了唯一的 ID。
2.getSelectedRowsAsJson 应该这样重构:
function getSelectedRowsAsJson()
{
var ids = $('#yourTableId').bootgrid('getSelectedRows'); //Here, remember that getSelectedRows only returns the values of the selected data-identifier columns (meaning, only the values of the selected pkcolumn (in this example) will be returned).
var myDataArray = []; //Create an array that will store the edited objects (key-value pairs)
$(ids).each(function (index, data) {
var editedData = {}; //Create an object to store the selected key-value pairs that have been edited.
editedData.key = data;
editedData.editedValue = $('#pk' + data).val(); //so here we retrieve the value of the input whose id equals "pkxxxx". In your example above, it could be "pk35630", and so on.
myDataArray.push(editedData);
});
//If myDataArray has data then proceed. Otherwise, return
if(myDataArray.length === 0)
return;
//At this point, myDataArray will look like this: [{key: 'pk35630', editedValue: 'blue bla blue'}, {key: 'pk35635', editedValue: 'bla bla bla'}]
//Next, you can use myDataArray to post it through ajax and update your database accordingly, thereafter refresh the bootgrid.
var postdata = JSON.stringify(myDataArray);
$.ajax({
url: your-url,
data: postdata,
type: 'post'
}).done(function (data, textStatus, jqXHR) {
//do your own stuff. for example, refresh/reload the bootgrid.
});
}
希望以上内容能帮助您解决问题。
我正在使用 jquery-bootgrid 位于此处。 http://www.jquery-bootgrid.com/GettingStarted
我创建了一个 bootgrid,其中有一个我想编辑的字段,所以我所做的就是在格式化程序中指定它。
formatters:
{
"fieldval": function(column, row)
{
return formatterForFieldval(column, row);
}
}
})
函数。
function formatterForFieldval(column, row)
{
return '<input type="text" class="form-control" id="usr" '
+ 'value="'+row.fieldval+'"'
+ '>' ;
}
这有效,它创建了一个我可以在运行时编辑的文本框。
现在下一步是保存修改后的数据。
我使用以下脚本获取用户修改的选定行。
function getSelectedRowsAsJson(tableId)
{
var selectedRowsArray =[];
var selectedRowsJsonArray = "";
var rows = $(tableId).bootgrid("getSelectedRows");
var arrayLength = rows.length;
for (var i = 0; i < arrayLength; i++)
{
var rowsc = $(tableId).bootgrid("getCurrentRows");
var arrayLengthCurrent = rowsc.length;
for (var ii = 0; ii < arrayLengthCurrent; ii++)
{
if(rows[i]===rowsc[ii].id)
{
selectedRowsArray.push(rowsc[ii])
}
}
}
selectedRowsJsonArray = JSON.stringify(selectedRowsArray);
console.log(selectedRowsJsonArray);
return selectedRowsJsonArray;
}
我的问题是 var rowsc = $(tableId).bootgrid("getCurrentRows");
没有更新到我在文本框中输入的修改后的数据。它仍然显示我修改文本框之前的旧数据(加载的数据)。
因此,当将行数组发送到数据库时,它会更新为相同的值。
修改文本框后如何更新 var rowsc = $(tableId).bootgrid("getCurrentRows");
?还是我做错了?
首先,根据我的经验(截至撰写本文时),getSelectedRows 仅 returns 所选列的主键。
我已经解决了你的问题。以下是您需要进行的修改: 1. 假设您的数据标识符列名称是 "pkcolumn":
function formatterForFieldval(column, row)
{
return '<input type="text" class="form-control" id="pk' + row.pkcolumn + '" value="'+ row.fieldval + '">'; //Notice I have prefixed the id with an arbitrary litteral "pk";
}
在上面的代码片段中,我们为每一行输入赋予了唯一的 ID。
2.getSelectedRowsAsJson 应该这样重构:
function getSelectedRowsAsJson()
{
var ids = $('#yourTableId').bootgrid('getSelectedRows'); //Here, remember that getSelectedRows only returns the values of the selected data-identifier columns (meaning, only the values of the selected pkcolumn (in this example) will be returned).
var myDataArray = []; //Create an array that will store the edited objects (key-value pairs)
$(ids).each(function (index, data) {
var editedData = {}; //Create an object to store the selected key-value pairs that have been edited.
editedData.key = data;
editedData.editedValue = $('#pk' + data).val(); //so here we retrieve the value of the input whose id equals "pkxxxx". In your example above, it could be "pk35630", and so on.
myDataArray.push(editedData);
});
//If myDataArray has data then proceed. Otherwise, return
if(myDataArray.length === 0)
return;
//At this point, myDataArray will look like this: [{key: 'pk35630', editedValue: 'blue bla blue'}, {key: 'pk35635', editedValue: 'bla bla bla'}]
//Next, you can use myDataArray to post it through ajax and update your database accordingly, thereafter refresh the bootgrid.
var postdata = JSON.stringify(myDataArray);
$.ajax({
url: your-url,
data: postdata,
type: 'post'
}).done(function (data, textStatus, jqXHR) {
//do your own stuff. for example, refresh/reload the bootgrid.
});
}
希望以上内容能帮助您解决问题。