1

ExtJS の Ext.grid.Panel で呼び出して、デフォルトで非表示になっている列がある場合、すべての列を表示できる関数はありますか? エンド ユーザーが非表示の列を表示する必要があるときはいつでも、各列をクリックする必要があります。以下に、フィールド ヘッダーを選択したときにカスタム メニュー オプションを追加するコードをいくつか示します。すべての列が表示されるように、この関数を実行したいと思います。

以下の例のように、「プロジェクト ID」と「ユーザー作成」はデフォルトで非表示になっています。[すべての列を選択] を選択すると、それらの列がオンになり、リスト ビューに表示されます。

        listeners: {

            ... 

            },
            afterrender: function() {
                var menu = this.headerCt.getMenu();
                menu.add([{
                    text: 'Select All Columns',
                    handler: function() {
                        var columnDataIndex = menu.activeHeader.dataIndex;
                        alert('custom item for column "'+columnDataIndex+'" was pressed');
                    }
                }]);           
            }
        }
    });

ここに画像の説明を入力

===========================

回答 (コード付き):

すべての列を非表示にするのはばかげているため、以下のエリックのコードに基づいて私が決定したことを次に示します。

            afterrender: function () {
                var menu = this.headerCt.getMenu();
                menu.add([{
                    text: 'Show All Columns',
                    handler: function () {
                        var columnDataIndex = menu.activeHeader.dataIndex;
                        Ext.each(grid.headerCt.getGridColumns(), function (column) {
                            column.show();
                        });
                    }
                }]);
                menu.add([{
                    text: 'Hide All Columns Except This',
                    handler: function () {
                        var columnDataIndex = menu.activeHeader.dataIndex;
                        alert(columnDataIndex);
                        Ext.each(grid.headerCt.getGridColumns(), function (column) {
                            if (column.dataIndex != columnDataIndex) {
                                column.hide();
                            }
                        });
                    }
                }]);
            }
4

2 に答える 2

5

特別なロジックが必要ない場合は、次のようなものを試すことができます。

Ext.each(grid.headerCt.getGridColumns(), function(column){
    column.show();
});
于 2012-08-27T17:01:08.553 に答える
1

私もこれを行う必要があり、最初はエリックと同じようにソリューションを実装しようとしましたが、低速のコンピューターでは大きなラグの問題が発生しました。各列が表示された後、グリッド上で完全なコンポーネントレイアウトを実行します。

私はこれでそれを回避しました:

grid.suspendLayout = true;
Ext.each(grid.headerCt.getGridColumns(), function(column) {
    column.show();
});
grid.suspendLayout = false;
grid.doComponentLayout();
于 2012-08-27T21:37:02.830 に答える