ExtJS GridPanel numberColumn - 排序问题
Posted
技术标签:
【中文标题】ExtJS GridPanel numberColumn - 排序问题【英文标题】:ExtJS GridPanel numberColumn - sort issue 【发布时间】:2010-08-24 11:58:24 【问题描述】:我有一个有 4 列的网格面板,其中之一是数字(最多 4 位数字),我想按此列对行进行排序。我的问题是 Ext JS 对行进行排序,就好像列是文本的一样,所以 5 在 3000 之后排序。
我尝试使用 numberColumn 而不是普通列(在 GridPanel 的列中指定 x 类型),但它不会更改排序。
因此我尝试格式化数字,使 5 看起来像 0005,而 0005 会在 3000 之前。但是 numberColumn 的格式选项似乎不允许我指定最小位数(在 Java 中,使用 NumberFormat, 0000 会起作用,但在这里不起作用)。
所以我放置了一个渲染器来强制我的数字显示为 4 位数字,它可以工作,但似乎排序方法使用了渲染之前的值,这是非常合乎逻辑的。
在尝试了所有想法后我被卡住了,有人知道吗?
【问题讨论】:
你用什么做商店?你在那边配置好类型了吗?它应该类似于:name: 'price', type: 'float'
它与“类型:'int'”有关。我尝试了“type:'float'”,但它也不起作用。
你有正在运行的样本吗?
您使用的是本地商店还是远程商店?
【参考方案1】:
如果您使用远程存储排序,则排序是远程完成的(数据库,如 mysql)。那么数据库中该字段的列类型是什么?如果是 char 或 varchar,那就是问题所在。
【讨论】:
【参考方案2】:我遇到过类似的问题,列类型无法解决此问题。要正确排序,模型中的类型应该是数字。
1) 在模型定义中将字段类型设置为整数。
Ext.define('myModel',
extend: 'Ext.data.Model',
fields: [ name: 'myField', type: 'int' ]
);
2) 使用该模型创建商店。
var myStore = Ext.create('Ext.data.Store',
model: 'myModel'
);
3) 使用 store 定义一个 GridPanel 并将您的字段作为 dataIndex 链接到列定义中。
Ext.create('Ext.grid.Panel',
store: myStore,
columns: [
header: 'Numbers', dataIndex: 'myField'
]
);
【讨论】:
【参考方案3】:我遇到了一个类似的问题,即 exj 网格按您号码中的每个数字排序,例如,一个列表可能会重新排序为 1、2、22、3、4、41、5...我在 extjs4 中发现,在模型中将类型定义为 int 就可以了,我没有指定本地或远程排序,但它似乎正在工作......
【讨论】:
【参考方案4】:Ext.define('ExtMVC.model.Contato',
extend: 'Ext.data.Model',
fields: ['id', type: 'int', 'name', 'phone', 'email']
);
这是我连接到 MySQL 的代码。我跟着这个-> 'id',输入:'int',结果很好......谢谢大家!我正在使用 Ext js 4.2.x
【讨论】:
以上是关于ExtJS GridPanel numberColumn - 排序问题的主要内容,如果未能解决你的问题,请参考以下文章
在 Extjs 中删除 GridPanel 的 headertoolbar