2012-04-27 108 views
1

我正在使用Jqgrid显示一些数据,使用DataType作为本地,我不想回发到服务器并返回jsonString与要绑定的数据。我将Json字符串传递给客户端,并使用addRowData逐个添加数据。如果由于我在每个单元格中的信息而导致数据的数量很大,它似乎会花费大量时间给用户。在客户端添加数据到Jqgrid

for (var i = 0; i < gridData.length; i++) 
     jQuery("#jqgInventory").jqGrid('addRowData', i + 1, JSON.parse(gridData[i])); 

是否有数据绑定到任何jqGrid的另一种方式,例如只要给它的JsonString作为数据源,它将绑定更快或其他任何建议。

注意:使用DataType作为Json并设置postUrl将比上述方法工作得更快。

请任何帮助! 由于提前, 阿拉

回答

3

这句话直接来自jqGrid的文档:“存储传递给电网的本地数据阵列,您可以直接指向这个变量的情况下,要加载一个阵列中的数据。它可以替代对相对大数据较慢的addRowData方法“。这正是你所说的。

见这里:http://www.trirand.com/jqgridwiki/doku.php?id=wiki:options

这是你的工作示例:http://jsfiddle.net/yNw3C/649/

您只需放在选项:

data: my_data 

my_data是信息的阵列。

+0

+1 from me。你的回答是正确的。我只建议你1)在grid选项列表中加入'gridview:true'来提高性能,2)增加'height:'auto''来提高可视性和3)增加'rowNum'选项, '10000'或将寻呼机添加到网格。例如添加'toppager:true'。没有分页器的代码将只显示默认情况下的前20行('rowNum'的默认值),然后删除其余行。 – Oleg 2012-04-27 17:28:00

+0

感谢您的提示,是的,我刚刚解决了问题中提出的问题。我还建议使用寻呼机或增加显示的最大行数。我刚刚从jqgrid示例中获取了这个示例:http://www.trirand.com/blog/jqgrid/jqgrid.html。在加载数据 - >数组数据并将其转换为使用'data'参数。由于某些原因,他们在示例中使用了'addRowData'约定...可能还没有更新过。 – 2012-04-27 17:40:30

+0

糟糕,我找到了正确的例子,在“新版本3.7”下,它也有一个寻呼机,我会更新小提琴。 – 2012-04-27 17:50:09

0

我同意来自Jeffery_The_Wind的另一个答案。他不会只写他推荐的选项的名称:data参数。添加一个应该使用gridview: true选项并且不要使用afterInsertRow回调很重要。

为了理解:使用addRowData是填补电网最慢,最无效的方法。最大的问题是,如果您在页面上插入元素或更改元素,至少必须通过Web浏览器重新计算所有现有元素的位置。放置在页面上的元素越多,插入到下一个元素上的速度就越慢。

一个解决问题大多是在一个从两个途径:

  • 一个使用DocumentFragment准备DOM元素沾边的层次结构,然后将片段在页面上的一个操作。
  • 一个将所有或大部分更改的内容创建为表示HTML片段的字符串,并使用innerHTML属性将多个元素放置在页面上的一个操作中。

jqGrid使用第二种方法。使用gridview: true来表现行为很重要。因此,建议的方式,以填补当地电网是:

  • datatype: 'local'的使用和data参数数据。输入data参数值的标准格式是包含行项目的数组。每个项目具有相同的属性,如colModelname属性的值。此外,每个项目应具有id属性,该属性定义“rowid” - 网格的<tr>元素(行)的ID。如果您有其他格式的输入数据,则必须使用描述数据格式的参数localReader参数。
  • 指定输入数据的参数datatype: 'jsonstring'datastr的用法。 datastr参数的值可以是具有相同内容的JSON字符串或JavaScript对象。因此,如果您将数据作为对象,则不需要使用JSON.stringify将其转换为JSON字符串。您可以额外使用jsonReader,其格式与您可能知道的datatype: 'json'相同。

data参数(在datatype: 'local'情况下)和datastr参数(在datatype: 'jsonstring'情况下)的数据的主要区别插入的是,输入的数据将通过的jqGrid在data参数的使用的情况下和排序将包含在datastr参数的情况下未排序。