【问题标题】:jqgrid dynamically change "dropdown column select" in search modaljqgrid在搜索模式中动态更改“下拉列选择”
【发布时间】:2018-02-23 11:47:45
【问题描述】:

我需要能够动态修改在“div.searchFilter”>“td.columns”中创建的下拉菜单“select.selectLabel”的内容。当用户选择一些外部选项时,我需要添加或删除某些搜索列。

我知道这些选择是基于 colModel 的,并且每次用户添加新的搜索规则时都会重新创建它们。因此很难通过 dataInit() 函数更改它们,因为每次添加新规则时我的更改都会丢失。甚至我也发现像...这样的元素。

dataInit: function(elem) { $(elem).closest("td.data").siblings(".columns").find("select.selectLabel"); }

然后删除特定的<option> 并添加新的,似乎没有效果。 我想知道是否有某种方法可以“告诉”搜索面板新的 ColModel,但是 我不想改变网格,只改变搜索模式的列。

谢谢 (版本 freejqgrid 4.13)

编辑 1: 明确(奥列格的评论)... 我正在使用 datatype=ajax(服务器数据)。

我有一个常规 colModel,但我想修改搜索面板下拉菜单(组合框)以添加/删除一些字段,而不是更改网格 colmodel。 我的意思是,添加/删除一些<option>(值和标签),并添加一些新的带有新“伪字段”的新的,这些新的“伪字段”不在以前的 colModel 中。

我尝试了 searchoptions.dataInit() 函数来获取每条新规则(这样我就可以到达相应的<select class="selectLabel">),但发现这个函数并不容易满足我的需求。

现在我正在尝试 searchoptions.afterRedraw() 但我不确定这是否对我有帮助。

编辑 2: 假设我有这个

colModel: [
    {name:"country", label:"Country", search:true},
    {name:"city", label:"City", search:true},
    {name:"zip", label:"Zip Code", search:true}
]

当用户打开搜索模式时,他将添加一个新规则并从下拉框中选择具有...的字段

<select class="selectLabel">
    <option value="country">Country</option>
    <option value="city">City</option>
    <option value="zip">Zip Code</option>
</select>

然后,用户单击一个外部按钮,该按钮会触发一个事件,该事件将修改任何列 dropbox(现在或将来),它应该是......

<select class="selectLabel">
    <option value="country">Country</option>
    <option value="city">City</option>
    <option value="zip">Zip Code</option>
    <option value="phone1">Phone 1</option> //dynamically added
    <option value="phone2">Phone 2</option> //dynamically added
    <option value="phone3">Phone 3</option> //dynamically added
    //(and so on...)
</select>

colModel 中不存在这些新的伪字段(phone1、phone2 ...),因为它们是由一些外部代码即时创建的。

【问题讨论】:

  • 我不确定我是否正确理解了这个问题。您在 jqGrid 中使用了哪个 datatype?您是否有本地数据?您能否提供包含 2-3 列和一些测试数据的小型演示(例如在 jsfiddle 中),以说明问题所在。您只想动态更改显示在“搜索”对话框中的标签,还是要搜索数据中存在但colModel 中没有列的属性?大多数事情都是可能的,但我想确保我正确理解您的需求。
  • 现在你可以刷新我的问题,编辑 1 和 2

标签: jqgrid free-jqgrid


【解决方案1】:

您没有发布演示,我可以对其进行修改。因此,我只描述你能做什么。 jqGrid的搜索对话框包含columns参数。搜索对话框包含基于选项的信息(如果存在)。如果该选项不存在,则将使用 colModel 的副本。因此,您可以使用您想要的任何信息动态填充columns,搜索对话框将包含它。查看the old answerthe demo 中的代码示例,其中使用columns 参数。

【讨论】:

  • 我花了半个小时试图编辑我的问题添加格式化代码,但 Stackoverflow 似乎不喜欢我的代码并拒绝我的版本。
  • Oleg,你的回答是正确的,我会尝试在搜索选项中使用“columns”参数。我不知道,我需要在每次需要时修改“列”选项,而不是在网格初始化时。这可能吗?谢谢
  • 在创建 $grid 之后,我仍然无法了解如何修改列(或 colModel)并更新所有过滤器下拉列表
  • @Aberel:您应该提供 demo(例如在 jsfiddle 中),它展示了您当前所做的事情。在我看到您的代码并可以重现您的问题后,我会尽力帮助您。
  • @Aberel:例如看演示jsfiddle.net/OlegKi/7k4dv191/30。您会看到两个搜索按钮。两者都显示不同的标签。动态填充columns 参数最容易的是,如果您像在演示的onClickButton 回调中的代码中那样直接 调用searchGrid。或者,您可以将 columns 放在 jqGrid 的 searching 参数内。您可以使用var s = $("#grid1").jqGrid("getGridParam", "searching"); 获取搜索参数并分配新的columns,只需使用s.columns = anotherArray。因此我不确定在哪里你有问题。
猜你喜欢
  • 1970-01-01
  • 2012-06-13
  • 2012-05-20
  • 1970-01-01
  • 2015-09-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多