1

行と同じように、グリッド内の列を並べ替えたい。actioncolumn ハンドラーから呼び出される単純な並べ替え関数を作成しました。

sortColumns:function(record) { // The record after which's values the columns are ordered
    var columns = this.columns;
    Ext.Array.sort(columns,function(col1,col2) {
        if(record.get(col1.dataIndex) > record.get(col2.dataIndex)) return 1;
        if(record.get(col1.dataIndex) < record.get(col2.dataIndex)) return -1;
        if(col1.dataIndex > col2.dataIndex) return 1;
        if(col1.dataIndex < col2.dataIndex) return 1;
        throw new Error("Comparing column with itself shouldn't happen.");
    });
    this.setColumns(columns);
});

行はsetColumnsエラーをスローするようになりました

Cannot add destroyed item 'gridcolumn-1595' to Container 'headercontainer-1598'

これは、「古い」列が最初に破棄されてから、同じであるため破棄された「新しい」列が適用されるためです。

順序を変更したいだけですが、それを行う機能が見つかりませんでした。あなたはそれを行う方法を知っていますか?

列のドラッグアンドドロップ順序が機能するため、実行可能です。しかし、sencha がそのドラッグ アンド ドロップを実装したソース コードが見つかりません。そのコードを探す場所を知っていますか?

4

4 に答える 4

2

列はグリッドの headerCt の項目であることがわかったので、以下はうまく機能し、他の回答とは異なり、新しい列コンポーネントを作成せず、列の状態とすべてを維持します。

var headerCt = normalGrid.headerCt,
    columns = headerCt.items.getRange();

Ext.Array.sort(columns,function(col1,col2) {
    if(record.get(col1.dataIndex) < record.get(col2.dataIndex)) return -1;
    if(record.get(col1.dataIndex) > record.get(col2.dataIndex)) return 1;
    if(col1.dataIndex < col2.dataIndex) return -1;
    if(col1.dataIndex > col2.dataIndex) return 1;
    return 0;
});

headerCt.suspendLayouts();
for(var i=0;i<columns.length;i++)
{
    headerCt.moveAfter(columns[i],(columns[i-1] || null));
}
headerCt.resumeLayouts(true);
于 2016-03-17T11:19:38.720 に答える
2

Reconfigure メソッドには 2 つの引数が必要です

grid.reconfigure(store, columns) 

プログラムで列を変更するフィドルは次のとおりですhttps://fiddle.sencha.com/#fiddle/17bk

于 2016-03-17T10:26:15.037 に答える
1

カスタムフィールドに列を保存し、再構成を使用せずにそれを行うことはできませんでした。誰かがより良いものを提案できるかもしれません(再構成は、通常の列フィールドだけではうまく機能しないようです):

Ext.define('MyGrid', {
    extend: 'Ext.grid.Panel',

    //just renamed "columns"
    myColumnConfigs: [
        //all your column configs
    ]
});

//to rearrange inside controller, also need to call it on grid render
var grid = this.getView();
var columns = grid.myColumnConfigs;
//...do your sorting on columns array
grid.reconfigure(columns);
于 2016-03-10T19:55:42.660 に答える
1

並べ替えを実現するために使用できる reconfigure メソッドがあります。

grid.reconfigure(columns);

これを確認してください。

于 2016-03-10T17:49:56.793 に答える