【问题标题】:jqgrid setColProp not workingjqgrid setColProp 不工作
【发布时间】:2012-04-21 13:21:48
【问题描述】:

我正在使用 setColProp 将值动态加载到 select 编辑类型中。

每当我调用时,我都会成功加载值:

loadComplete: function() {
                $("#profile_table").setColProp('contract_num', { editoptions: { value: contract_list} });
            },

但是它只在这里有效,而且只有一次。如果我更改contract_list 的值并尝试通过调用来更新jqgrid

$("#profile_table").setColProp('contract_num', { editoptions: { value: contract_list} });

再次从任何地方(从按钮单击、从 afterSubmit 甚至重新加载表)它什么都不做。

是不是我做错了什么?

编辑: 这是对我正在尝试做的事情的更好解释。

我有一个 ID 为 #profile_table 的 jqGrid 表。

这是 jqGrid 代码中colModel 的一部分:

colModel:[
                {name:'contract_num',index:'contract_num', editable: true, hidden: false, width:30, edittype: "select", editrules: {required: true}},   
]

最初,编辑/添加表单中的contract_num 编辑字段在其select 框中没有值。我从一个名为contract_list 的javascript 变量加载初始值,该变量是在创建表之前创建的。我最初使用以下方法加载这些值:

loadComplete: function() {
                $("#profile_table").setColProp('contract_num', { editoptions: { value: contract_list} });
            },

这很好用,但是当用户更改显示此表的页面上的其他内容时,contract_list 的值可能会发生变化。所以我试图动态更新select 框内的选项,用于该表的编辑/添加表单内的contract_num 字段。我成功地更改了contract_list 中的值,但是我无法让实际的select 框更新为新值。

我正在尝试通过调用来更新它:

$("#profile_table").setColProp('contract_num', { editoptions: { value: contract_list} });

然后在有人更改 contract_list 的值时重新加载网格,但表格并未更新。

【问题讨论】:

  • 更详细地描述问题很重要。 editoptions.value 将如何使用?例如,如果您在 editing mode 中有一些行,则选择不会自动更新,但将开始编辑的下一行将使用新设置。如果您将formatter: 'select'editoptions.value 一起使用,则必须重新加载 grig 以应用网格体中的更改。您能否提供更完整的代码示例?
  • 我添加了更多代码并更好地解释了我正在尝试做的事情,希望您现在能理解我的问题,谢谢
  • 抱歉,更新的部分没有清除任何内容。您写道“我无法让实际的选择框更新为新值”。什么是“实际选择框”。 仅当编辑某个单元格或行时,选择才存在(我仍然不知道您使用哪种编辑模式)。为什么在setColProp 之后重新加载网格?你现在有一些编辑模式吗?如果答案是“无行”,则您不需要进行任何重新加载。为什么你把setColProp 放在loadComplete 里面?我不知道谁更改了contract_list,何时更改以及如何更改。您是否在某些事件处理程序中执行此操作?
  • 我使用 jqgrid 中的默认编辑表单,只要有人点击“编辑”或“添加”按钮,就会弹出该表单。每当通过从 mysql 数据库中检索值加载页面时,contract_list 中的值就会被填充。该网站的用户可以通过网页的不同部分更改 mysql 数据库中的值,如果他们更改了值,则 contract_list 将使用新值更新,并且编辑表单内的 select 框需要用新值更新。我尝试使用 setColProp 更新它,但无论何时调用它都没有任何反应。
  • 现在我想我理解了你的问题并写下了我的答案。

标签: javascript jquery jqgrid


【解决方案1】:

如果您使用表单编辑的recreateForm: true 选项,我认为您的主要问题将得到解决(参见here 用法示例)。我建议您在调用navGrid 之前将设置设置为默认值(参见here 对应的代码)。

此外,根据您在 cmets 中编写的信息,我认为您最好使用 dataUrl 而不是 editoptions 中的 value。因此 jqGrid 可以在创建编辑表单期间直接从服务器加载值列表。有时buildSelect 的用法很有用。它可以帮助您以例如 JSON 格式提供来自服务器的数据,并根据 buildSelect 内部的服务器数据构造 <select><option value="...">...</option>...</select> HTML 片段。此外,可能需要设置ajaxSelectOptions: { cache: false } jqGrid 选项(请参阅herehere)或针对HTTP 标头"Cache-Control: private, max-age=0" 强制重新验证dataUrl 上的先前服务器响应(请参阅@987654327 @和here)

【讨论】:

  • 使用recreateForm: true 没有帮助,但是我将代码更改为使用dataUrl,现在select 字段在每次打开编辑表单时通过ajax 重新填充,这显示了更新的值。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-11-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-12
  • 1970-01-01
相关资源
最近更新 更多