0

ページにテキスト入力があり、それを使用して jqxgrid をフィルタリングしたいと考えています。次のようなクエリを実行する必要があります

Select * from users where col1 = 'filterExpression' OR col2 = 'filterExpression' OR col3 = 'filterExpression' ...(for all filterable columns. 

「filterExpression」はテキストボックスのテキストです。

次のコードをオンラインで見つけて、問題を半分解決しました。

function setGlobalFilter() {

    var filtervalue = $('#FilterSubString').val();

    var columns = $('#jqxgrid').jqxGrid('columns');
    var filtergroup, filter;
    // clear filters and exit if filter expression is empty
    $('#jqxgrid').jqxGrid('clearfilters');
    if (filtervalue == null || filtervalue == '') {
        return;
    }
    // the filtervalue must be aplied to all columns individually,
    // the column filters are combined using "OR" operator
    for (var i = 0; i < columns.records.length; i++) {
        if (!columns.records[i].hidden && columns.records[i].filterable) {
            filtergroup = new $.jqx.filter();
            filtergroup.operator = 'or';
            filter = filtergroup.createfilter('stringfilter', filtervalue, 'contains');
            filtergroup.addfilter(1, filter);

            $('#jqxgrid').jqxGrid('addfilter', columns.records[i].datafield, filtergroup, true);
        }
    }
}

私が直面している問題は、これがすべての列にフィルターを適用することですが、列のいずれかがフィルター式に失敗した場合、レコードは返されません。少なくとも 1 つの列に「filterExpression」が含まれている場合にレコードが返されるようにします。

あなたが助けてくれることを願っています

4

1 に答える 1

0

必要なのは、フィルター間の「OR」操作です。API の関数 AddFilter() を見た後、同じ列の 2 つのフィルター間に OR 演算を設定できます。しかし、AddFilter() は 2 つの列間で同じことを行う方法を提供していないようです。

ここでAPIを見ることができます:

http://www.jqwidgets.com/jquery-widgets-documentation/documentation/jqxgrid/jquery-grid-api.htm

ここでこの機能を検索/質問することもできます (jQWidgets チームは通常、迅速に対応します)。

http://www.jqwidgets.com/community/

しかし、あなたの最善の策は、サーバー側でそれを行い、データをリロードすることだと思います.

于 2014-03-27T18:50:53.657 に答える