【问题标题】:ExtJS GridPanel numberColumn - sort issueExtJS GridPanel numberColumn - 排序问题
【发布时间】: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'”,但它也不起作用。
  • 你有正在运行的样本吗?
  • 您使用的是本地商店还是远程商店?

标签: extjs


【解决方案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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2014-08-29
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多