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

重新配置方法需要两个参数

grid.reconfigure(store, columns) 

这是以编程方式更改列的小提琴https://fiddle.sencha.com/#fiddle/17bk

于 2016-03-17T10:26:15.037 回答
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 回答
1

有一种重新配置方法可用于实现重新排序,例如:

grid.reconfigure(columns);

检查这个

于 2016-03-10T17:49:56.793 回答
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 回答