多数の列 (> 500 列) で列選択が非常に遅いという同じ問題がありました。私はtreegridを使用しているため、ほとんどのパフォーマンス向上薬(微調整を意味します)を服用できません。グリッドを適用して再描画するだけで 3 分以上かかる場合があります。
しかし、私は汚い残忍な方法を思いつきました。私にとってユニークなことは、常にデータのコピーを保持していることです (js でローカルな json 形式)。したがって、再描画にはネットワーク トラフィックがまったくありません。そこで、自分で列チューザーを実装し、残忍なアンロードを実行してグリッドを再作成します。現在、選択した列を適用して再描画するには、最大で約 10 秒以上かかります。
これが私の列チューザーのコードです。ご覧のとおり、私のプログラムに非常に特化していますが、アイデアを得ることができます。ファンシーな GUI はこちらから。
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");
}
}
});
}