如何在jqGrid搜索中发送到服务器之前自定义数据

时间:2012-10-13 17:49:23

标签: jqgrid jqgrid-asp.net jqgrid-php jqgrid-formatter

我是jqGrid的首发。我为Genereate Grid编写了这段代码

grid.jqGrid({
    url: 'jQGridHandler.ashx',
    postData: { ActionPage: 'Report5',type:'Fill' },
    datatype: 'json',
    height: 530,
    colNames: ['id','UnitPrice'],
    colModel: [
        { name: 'Id', sortable: true, search: true, editable: false, hidden: true,
            key: true },
        { name: 'UnitPrice', shrinkToFit: true, width: 50,
            searchoptions: {
                sopt: ['eq', 'ne', , 'le', 'ge'],
                dataInit: function (elem) {
                    $(elem).keyup(function () {
                        var str = $(this).val();
                        str = str.replace( /,/g, "" );
                        $(this).val(addCommas(str));
                    });
                }
            }}
    ],
    gridview: true,
    search: true,
    rowNum: 100,
    rowList: [100, 200, 300],
    pager: '#pager',
    viewrecords: true,
    rownumbers: true,
    footerrow: true, userDataOnFooter: true, altRows: true,
});
grid.jqGrid('navGrid', '#pager', { add: false, edit: false, del: false, search: true },
    {},
    {},
    {},
    { multipleSearch: true });
grid.jqGrid('filterToolbar', { defaultSearch: 'cn', stringResult: true });

function addCommas(nStr) {
    nStr += '';
    var x = nStr.split('.');
    var x1 = x[0];
    var  x2 = x.length > 1 ? '.' + x[1] : '';
    var rgx = /(\d+)(\d{3})/;

    while (rgx.test(x1)) {
        x1 = x1.replace(rgx, '$1' + ',' + '$2');
    }
    return x1 + x2;
}

我希望用户在搜索框中选择unitPrice和type number,number 3 char 3 char sperate with ,,我写函数addCommas并且工作正常,当用户输入价格时按住,按下搜索按钮单价不发送到服务器。 这张照片中的例子

enter image description here

并点击搜索按钮后

enter image description here

请帮帮我。谢谢所有

1 个答案:

答案 0 :(得分:4)

在发送到服务器之前,有很多方法可以修改搜索过滤器。

首先,我建议您在每次更改输入字段中的数据时显式调用change事件。 Searing Dialog保持搜索过滤器的内部表示,并在change事件处理程序中对其进行修改。因此,添加$(this).change();$(this).trigger('change')可以解决您当前遇到的一些问题。

顺便提一下,您已经看到有关搜索过滤器的信息将作为filters参数发送到服务器。您可以将其作为filters的{​​{1}}属性获取。要获得对postData参数的引用,您可以使用postData

grid.jqGrid("getGridParam", "postData")的回调beforeSearch是您可以在发送到服务器之前访问过滤器的地方。 onSearch是搜索对话框使用的另一个回调。为了有共同的方法,我建议你使用jqGrid的filterToolbar回调。在回调内部,您可以使用beforeRequest获取postData,如果拥有$(this).jqGrid("getGridParam", "postData")属性,则可以修改它。您可以在the answer中找到修改filters属性的示例。