【发布时间】:2011-06-24 03:25:11
【问题描述】:
背景
我从另一位开发人员那里获得了一些涉及显示搜索结果的未完成工作。他的方法是使用内联 Javascript 和 jQuery 在 HTML 表格中呈现结果,如下所示。
我正在尝试完成这项工作,但我更愿意编写更少的代码并使用 jqGrid,因为它包含排序功能,并且让代码更整洁。让 jqGrid 显示结果很容易,但是让单选按钮出现在空白列中比我想象的要难。
应用中jqGrid的版本是3.7.2。网格需要在左侧有单选按钮以供选择,以使内容与应用程序的其余部分保持一致。
我被困在哪里
似乎没有办法在 jqGrid 中有一个未绑定的列。也就是说,每一列似乎都需要基础数据中的一个字段。如果您没有虚拟字段,则行数据和列标题会错位。
我遇到了一个example(请参阅行编辑 -> 自定义编辑),它返回带有数据中的虚拟字段的 JSON,然后修改网格数据以插入按钮。
我的偏好是不包含虚拟数据,因为它感觉很脏 :) 我希望我的 JSON 仅包含表示搜索结果所需的数据。所以我认为最好在脚本代码中添加虚拟字段,以保持服务器端的代码干净。
我正在尝试在 jqGrid 呈现之前修改从 AJAX 调用返回的数据。我已经尝试连接到 loadComplete 事件,但是当我修改数据时,它似乎是在它已经呈现之后。
我还尝试在options 的ajaxGridOptions 字段上挂钩success 事件,但这似乎完全覆盖了该事件并且jqGrid 不呈现数据。
如何在 jqGrid 呈现之前修改从 Web 服务调用返回的数据?
【问题讨论】:
-
你具体对数据做了什么?有几个选项,但这取决于你在做什么。
-
在 jqGrid 上,我有一个空白列,我正在将控件插入其中。 trirand.com/blog/jqgrid/jqgrid.html (Row Editing -> Custom Edit) 上的示例在 JSON 响应中的单元格数组中有一个虚拟字段,但我想在 jqGrid 看到它之前将虚拟字段动态添加到客户端的响应中,而不是在从服务器端发送的响应中具有虚拟字段。
-
在jqGrid处理数据之前没有通用的方法来修改服务器返回的数据,但是如果返回的数据是JSON格式的,你可以将数据转换成另一个在
jsonReader内部格式化或仅使用自定义格式化程序以另一种方式显示数据。您能否在问题中包含定义 jqGrid 的 JavaScript 代码和从服务器返回的完整 JSON 数据?您能否另外准确描述您想要进行哪些修改?在示例中可以找到更好的解决方案。 -
@oleg - 我正在填充数据,因为如果你不这样做,数据最终会出现在错误的列中。我在上面链接的示例使用以下代码:
while($row = mysql_fetch_array($result,MYSQL_ASSOC)) { $responce->rows[$i]['id']=$row[id]; $responce->rows[$i]['cell']=array("",$row[id],$row[invdate],$row[name],$row[amount],$row[tax],$row[total],$row[note]); $i++; }注意""添加为第一个字段。