1

トランザクションID、デビット、クレジット、バランスの列を持つjqgridがあります。借方と貸方はデータベースから取り込まれ、残高は貸方 - 借方の差からの計算によって設定されます。編集はエディットフォームで行います。ユーザーが借方または貸方の値の 1 つを変更すると、グリッドの選択された行で残高列を更新する必要があります。

どんな助けでも大歓迎です。

$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?
4

1 に答える 1

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 パッケージを使用できます。

于 2013-01-22T20:20:31.827 に答える