jqGrid - 更改过滤器/搜索弹出表单 - 在页面上平展 - 不是对话框

Posted

技术标签:

【中文标题】jqGrid - 更改过滤器/搜索弹出表单 - 在页面上平展 - 不是对话框【英文标题】:jqGrid - Change filter/search pop up form - to be flat on page - not a dialog 【发布时间】:2012-02-08 13:34:01 【问题描述】:

我正在使用 jqgrid。

我真的需要这方面的帮助,并且不知道该怎么做,但我相信它可能......任何人都可以给我一个部分答案吗?是从哪里开始的?

我现在有一个要求,说对于搜索和过滤网格,我不希望打开常规模型表单弹出操作,而是在进入页面时应该打开过滤器,而不是作为弹出表单,但应该打开页面顶部,但仍然具有所有功能。

需要看起来像这样:

再次让选择标签填充正确的信息(就像他们在弹出表单中所做的那样),当点击“保存”时,它应该像常规一样将请求发送到服务器。

这可能吗?

********编辑********

我基本上唯一需要的就是让过滤器没有对话框部分。

【问题讨论】:

@Oleg,你能帮帮忙吗?像你以前那样帮助我吗?? 我收到了类似上面的消息。如果您以后想给我发消息,您应该将其发布在我写答案或评论的任何页面上。只有在我收到消息通知的情况下。 好的,谢谢,下次知道... 【参考方案1】:

旧搜索对话框问题的解决方法你可以找到here。我将演示修改为 jqGrid 中搜索对话框的当前实现。

你可以在the demo看到结果:

对应的代码如下:

var $grid = $('#list');

// create the grid
$grid.jqGrid(
    // jqGrid opetions
);

// set searching deafauls
$.extend($.jgrid.search, multipleSearch: true, multipleGroup: true, overlay: 0);

// during creating nevigator bar (optional) one don't need include searching button
$grid.jqGrid('navGrid', '#pager', add: false, edit: false, del: false, search: false);

// create the searching dialog
$grid.jqGrid('searchGrid');

var gridSelector = $.jgrid.jqID($grid[0].id), // 'list'
    $searchDialog = $("#searchmodfbox_" + gridSelector),
    $gbox = $("#gbox_" + gridSelector);

// hide 'close' button of the searchring dialog
$searchDialog.find("a.ui-jqdialog-titlebar-close").hide();

// place the searching dialog above the grid
$searchDialog.insertBefore($gbox);
$searchDialog.css(position: "relative", zIndex: "auto", float: "left")
$gbox.css(clear:"left");

【讨论】:

一个问题,第一次搜索后,对话框关闭,我需要它一直保持打开状态......我该怎么做?我在您的演示中看到它保持打开状态,我做错了什么? 还有一种方法可以让我们不选择“and”或“or”选项,默认情况下它总是会这样做,并且当有几个过滤器时? @Ovi:您的第一个问题是关于关闭对话框。您使用哪些设置?在我的演示中,我使用默认设置closeAfterSearch: false, closeAfterReset: false 并将对话框的关闭按钮设置为隐藏。所以我不明白如何关闭对话框。到下一个问题。 colModel 中的每一列都可以有 search: false 选项。关于“and”或“or”选项的最后一个问题:您可以使用$searchDialog.find("select.opsel").hide();通过“ADD”/“OR”操作隐藏选择。 现在我隐藏了“AND”/“OR”,在我单击 + 或 - 添加附加规则后,它再次出现。我该怎么做才能保持隐藏? 如果您尝试使用一些标准对话框而不是编写自己的对话框,就会出现问题,但是您希望在标准对话框中进行许多自定义。一种方法是尝试在afterRedraw 回调中隐藏“添加”/“或”按钮。在“+”/“-”按钮上定义自定义事件处理程序的另一种方法。您完全可以选择另一种方式并创建自定义输入字段:有关详细信息,请参阅here。【参考方案2】:

这是我使用 Oleg 的出色帮助实现它的方式。

我希望我的用户能够立即输入搜索条件(在本例中为用户名)并让 jqGrid 显示结果。不要乱用弹出的搜索对话框。

这是我的最终结果:

为此,我需要这个 html

Employee name:
<input type="text" name="employeeName" id="employeeName" style="width:250px" />

<!--  This will be my jqGrid control and pager -->
<table id="tblEmployees"></table>
<div id="pager"></div>

还有这个 javascript

$("#employeeName").on('change keyup paste', function () 
    SearchByEmployeeName();
);

function SearchByEmployeeName()

    //  Fetch the text from our <input> control
    var searchString = $("#employeeName").val();

    //  Prepare to pass a new search filter to our jqGrid
    var f =  groupOp: "AND", rules: [] ;

    //  Remember to change the following line to reflect the jqGrid column you want to search for your string in
    //  In this example, I'm searching through the UserName column.

    f.rules.push( field: "UserName", op: "cn", data: searchString );

    var grid = $('#tblEmployees');
    grid[0].p.search = f.rules.length > 0;
    $.extend(grid[0].p.postData,  filters: JSON.stringify(f) );
    grid.trigger("reloadGrid", [ page: 1 ]);

再次感谢 Oleg 展示了如何使用这些搜索过滤器。

它确实让 jqGrid 更加用户友好。

【讨论】:

嗨@Mike。这个解决方案效果很好,但是如果我们在没有分页的情况下加载所有 1000 条记录,那么过滤将无法按预期正常工作。对此有什么建议吗? 我已将 rowNum:-1 设置为一次加载所有记录,在这种情况下过滤无法正常工作。

以上是关于jqGrid - 更改过滤器/搜索弹出表单 - 在页面上平展 - 不是对话框的主要内容,如果未能解决你的问题,请参考以下文章

在每次重新访问页面时触发搜索 jqgrid 过滤器

在提交使用JQGrid中的filterGrid生成的搜索表单之前进行验证

更改表单过滤器时访问崩溃

Jqgrid工具栏过滤,在尝试搜索时无法在字符串''上创建属性'过滤器'

jqGrid过滤器或按日期搜索不起作用客户端

jqGrid过滤器是apllying但ui未更新