我有一个有4列的网格面板,其中一列是数字(最多4位数),我想按此列排序。我的问题是Ext JS对行进行排序,就像列是文本一样,因此5在3000之后排序。
我尝试使用numberColumn而不是普通列(在GridPanel的列中指定x类型),但它不会更改排序。
因此我尝试格式化数字,因此5将显示为0005,而0005将在3000之前。但numberColumn的格式选项似乎不允许我指定最小数字位数(在Java中,使用NumberFormat, 0000会工作,但这里没有)。
所以我放一个渲染器来强制我的数字以4位数显示,但是它有效,但似乎sort方法在渲染之前使用了这些值,这是非常符合逻辑的。
我在尝试所有想法后陷入困境,是否有人有线索?
答案 0 :(得分:1)
如果您正在使用远程存储排序,则远程完成排序(数据库,如mysql)。那么该字段的数据库列的类型是什么?如果它是char或varchar,那就是问题。
答案 1 :(得分:1)
我遇到了类似的问题,列类型无法修复此问题。要获得正确的排序,模型中的类型应为数字。
1)在模型定义中将字段类型设置为整数。
Ext.define('myModel', {
extend: 'Ext.data.Model',
fields: [{ name: 'myField', type: 'int' }]
});
2)使用该模型创建商店。
var myStore = Ext.create('Ext.data.Store',{
model: 'myModel'
});
3)使用商店定义GridPanel,并将您的字段作为dataIndex链接到列定义。
Ext.create('Ext.grid.Panel',{
store: myStore,
columns: [{
header: 'Numbers', dataIndex: 'myField'
}]
});
答案 2 :(得分:0)
我遇到了一个类似的问题,exj网格按你的号码中的每个数字排序,所以例如一个列表可能被重新排序为1,2,22,3,4,41,5 ......它的价值,我发现在 extjs4 中,在模型中将类型定义为int做了诀窍,我没有指定本地或远程排序,但它似乎正在工作......
答案 3 :(得分:0)
Ext.define('ExtMVC.model.Contato', {
extend: 'Ext.data.Model',
fields: [{'id', type: 'int'}, 'name', 'phone', 'email']
});
这是我连接到MySQL的代码。我跟着这个 - > {' id',输入:' int'},它运作得很好......谢谢大家!我使用Ext js 4.2.x