【问题标题】:How to set jqgrid value dynamically calculated from editform如何设置从editform动态计算的jqgrid值
【发布时间】:2013-01-06 04:29:42
【问题描述】:

我有 jqgrid 列交易 id、借方、贷方和余额。 借方和贷方从数据库中填充,余额通过贷方 - 借方差异的计算设置。 编辑在editform中完成。有一次,用户更改了借方或贷方的值之一,我需要在网格的选定行中更新余额列。

非常感谢任何帮助。

$myGrid.jqGrid({                
url: myURL + '?method=GetTranactions', 
postData: { 
    prID: function() { return getProv(); },
    mn: function() { return $("#month option:selected").val(); },
    yr: function() { return $("#year option:selected").val(); }
},
datatype: 'json', 
mtype: 'POST',
colNames:['Trx ID','Debit','Credit','Balance',],
colModel :[
    {name:'accttrx_id',index:'accttrx_id', width:75, sorttype:"int", editable:true},
    {name:'debit',index:'debit', 
        width:70, 
        align:"right",
        formatter:'number',
        sorttype:"number",
        editable:true,
        edittype:"text",
        editoptions:{
            size:20,
            defaultValue:'0',                                       
            dataEvents: [   
                {
                    type: 'change',
                    fn: function(e) {
                        var db = $(e.target).val();
                        var cr = $('#credit').val();
                        bal = cr - db;  // got the balance 
                        alert(bal); // how to update balance column for current row?
                        }
                    }
                ]

            },
        editrules:{required:true},
        formoptions:{elmprefix:"(*)"}
        },
    {name:'balance',index:'balance',
        width:70, 
        align:"right",
        formatter:'number',
        sorttype:"number",
        editable:false},....

.................................................. .....................

$myGrid.navGrid('#pager', {
search:false,
edit:true,edittitle:"Edit Transation",
add:true,addtitle:"Add Transaction",
refresh:true,
del:true,deltitle:"Delete Transaction"
},
{
beforeShowForm: 
    function(form) { 
        $('#tr_accttrx_id', form).hide();                           
    },
    afterSubmit:
    ..... update balance after submit?

【问题讨论】:

    标签: jquery jqgrid


    【解决方案1】:

    对于editForm中的自定义计算,就像你在这里描述的那样,我通常把代码放在你在这里描述的beforeShowForm函数中。请使用与此类似的内容:

    beforeShowForm: function() {
        $('#debit,#credit').change(function(){
            $('#balance').val( parseFloat($('#credit').val()) - parseFloat($('#debit').val()) );
        });
    },
    reloadAfterSubmit: true,
    ...
    

    jQuery 选择器(例如 $('#balance'))使用 jqGrid 列的名称作为 ID 选择器。我这样做是因为我知道 jqGrid 使列名成为编辑表单中的输入元素 ID。

    提交后重新加载(在网格中显示更新的信息)

    为了在网格中看到您的新余额值,请使用我在上面示例中包含的编辑表单的reloadAfterSubmit 属性。请确认,您使用的是表单编辑还是内联编辑?如果您正在使用表单编辑,那么我的答案中的代码应该可以工作,如果应该与 editGridRow 方法一起使用。见这里:http://www.trirand.com/jqgridwiki/doku.php?id=wiki:form_editing

    parseFloat 和 money 的小问题

    虽然上面的代码在大多数情况下应该可以工作,但请注意不要使用 parseFloat 命令来进行金钱计算。我之前遇到过四舍五入的问题。相反,您可以使用BigDeciaml package

    【讨论】:

    • 谢谢 Jeffery,更改代码作为触发器可以正常工作,我添加了 alert() 来检查这一点,但是,下面的这一行没有设置网格 $('#balance') 中的值。 val( parseFloat($('#credit').val()) - parseFloat($('#debit').val()) );
    • 您必须提交表单以保存数据,然后重新加载网格。
    • 点击提交后,借方和贷方的值会更新,但是在刷新页面之前,余额的值不会更新。我将余额添加到查询中的列中,作为贷方和借方列差异的派生值。这对我初始加载网格有帮助,但对更新没有帮助。
    • 您可以在提交后重新加载网格,请参阅我的更新答案。
    • 嗯,没有enuf声望,有13个需要15个
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-03-15
    • 1970-01-01
    • 1970-01-01
    • 2012-01-30
    • 2023-04-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多