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

ExtJs - 通过 Gridpanel 的索引获取行

extjs gridpanel:当 GridPanel 窗口再次显示时,ColumnModel 变为空

ExtJS 4.1 GridPanel 错位列

ExtJS 3.4.0 GridPanel 有条件地禁用行

extjs 5,在gridpanel上定义dropzone,但不能drop,为啥?