如何使用新数据更新Bootgrid选定的行

时间:2017-06-26 10:10:43

标签: javascript jquery jquery-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+'"'
           +     '>' ;


}

这样可以创建一个我可以在运行时编辑的文本框。 enter image description here

现在下一步是保存修改后的数据。

我使用以下脚本来获取用户修改的选定行。

  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");?或者我做错了吗?

1 个答案:

答案 0 :(得分:1)

首先,根据我的经验(撰写本文时),getSelectedRows仅返回所选列的主键。

我已经解决了你的问题。以下是您需要进行的修改: 1.假设您的数据标识符列名是&#34; pkcolumn&#34;:

SELECT tt_name, additional_info, transtypeID, foreign_account, balance
FROM
(
  SELECT 
    tt.tt_name,
    tt.additional_info, 
    trn.transtypeID,
    trn.foreign_account,
    trn.balance,
    row_number() 
      over (partition by tt.transtypeID, tt.tt_name 
            order by case when (trn.foreign_account = tt.foreign_account)
                            or (trn.foreign_account is null and tt.foreign_account is null)
                               then 1
                               else 2
                     end) as rn
  FROM ##transtypes tt 
  JOIN ##transactions trn ON trn.transtypeID = tt.transtypeID
) ranked
WHERE rn = 1;

在上面的代码片段中,我们为每个行输入提供了唯一的id。

2.getSelectedRowsAsJson应该像这样重构:

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";
}

我希望以上内容可以帮助您解决问题。