JQGRID - 在网格上定义setGroupHeaders时,列选择器太慢

时间:2012-02-01 10:51:39

标签: jqgrid column-chooser

我对列选择器有问题,选择要添加或删除的列后显示结果非常慢。我注意到“setGroupHeaders”是问题所在。这对夫妇栏目Chooser和Group Header似乎没有很好的表现。

我在JqGrid 4.3.1上,使用最后一个jquery libs。以前的版本也出现了问题(我必须更新所有库以确保问题不是来自旧版本)。

我真的在论坛上搜索过有关此内容的任何帖子,但我找不到任何内容。我是唯一有这个问题的人吗?它被引用了吗?

先谢谢你的帮助!!

1 个答案:

答案 0 :(得分:0)

我在大量列(> 500列)上遇到极慢的列选择器问题。因为我正在使用treegrid,所以我无法使用大多数性能增强药物(我的意思是调整)。有时,仅应用和重绘网格需要3分钟以上。

然而,我想出了一个肮脏的野蛮方式来绕过。对我来说唯一的事情是我总是保留一份数据(js中的json格式)。因此,任何重绘都不会有网络流量。所以,我自己实现了一个列选择器并进行了残酷的卸载并重新创建了网格。现在,应用所选列并重绘最多需要10秒以上。

这是我的列选择器的代码。你可以看到它对我的程序非常专业,但你可以得到一个想法。狂热的GUI来自here如果我做了一些糟糕的代码,请原谅我。

choose_column: function() {
  var me = this;
  var rn=this.response_json.colNames;
  var rm=this.response_json.colModel;
  var line_text;

  var html_text = '<select id="column_selector" class="multiselect" multiple="multiple" name="countries[]" style="width: 500px; margin: 0px auto; height: 340px; ">\n';

  for ( var i = 0 ; i < rn.length; i++ ) {
    if (rm[i].hidden) {
      line_text = '<option value="'+i+'">'+rn[i]+'</option>\n';
    } else {
      line_text = '<option value="'+i+'" selected="selected">'+rn[i]+'</option>\n';
    }
    html_text += line_text;
  }

  html_text += '</select>';

  jQuery("#dlg_choose_columns").empty()
  .append(html_text);
  jQuery(".multiselect").multiselect({
    sortable: true, 
    searchable: true,
    hide: 'explode',
    show: 'blind',
    dividerLocation: 0.5
  });
  jQuery("#dlg_choose_columns").dialog({
    width: 535,
    height: 550,
    modal: true,
    title: 'Select Columns',
    hide: 'explode',
    buttons: {
      "Ok": function() {
        var selected_values = jQuery(".multiselect").val();
        for ( var i = 0; i < rn.length; i++ ) {
          rm[i].hidden = true;
        }
        for ( var i = 0; i < selected_values.length; i++ ) {
          delete rm[selected_values[i]].hidden;
        }
        jQuery("#dlg_choose_columns").dialog("close"); 
        me.unload_jqgrid();
        me.create_grid(null, me.is_tree, me.need_plot);
      },
      "Cancel": function() {
        jQuery("#dlg_choose_columns").dialog("close"); 
      }
    }
  });

}