为啥这个数据网格以奇怪的顺序排序?

Posted

技术标签:

【中文标题】为啥这个数据网格以奇怪的顺序排序?【英文标题】:Why does this datagrid sort in a weird order?为什么这个数据网格以奇怪的顺序排序? 【发布时间】:2012-05-21 22:04:41 【问题描述】:

我有一个数据网格,其中每一行都有一个列,其中我定义了一个格式化程序,以根据数据库中的内容格式化显示结果,并创建一个 div,其背景颜色取决于数据库。

我的数据网格有这个结构:

structure: [
  
    name: "Name",
    field: "name",
    width: "auto"
  ,
  
    name: "Initials",
    field: "initials"
  ,
  
    name: "E-mail",
    field: "email",
    width: "auto"
  ,
  
    name: "Kerberos",
    field: "kerberos",
    width: "120px",
    formatter: function(kerberos)
      var format = "";

      if(kerberos == "password expired" || kerberos == "account expired")
        format = '<div class="yellow" title="'+kerberos+'">'+kerberos+'</div>';
      else if(kerberos == "ok")
        format = '<div class="green" title="'+kerberos+'">'+kerberos+'</div>';
      else
        format = '<div class="red" title="Has no kerberos account">not available</div>';
      

      return format;
    
,

当我按列标题进行排序时,它对行进行排序,放置不一致,所以我不知道它是否正确排序(见下图)。如何定义数据网格必须对该列进行排序的方式?

由于&lt;&gt; 字符,我认为这是我在格式化程序中执行的html &lt;div...&gt; 部分,但如果我只输出文本(根据我的理解,应该按字母顺序排序),它仍然很奇怪。有谁知道为什么会发生这种情况以及我该如何解决?

编辑: 忘了添加我如何获取/分配数据。我从 JSON 格式的 xhr.post 中获取了大量数据,然后我执行以下操作:

dojo.xhr.post(
    url: "/cgi-bin/users.cgi",
    handleAs: "json",
    content: 
      psearch: "dojoXhrBlank"
    ,
    load: function(jsondata)
      // Creating a store for the datagrid
      var personStore = new Memory( data: jsondata );

      // Create datastore for datagrid
      var gridStore = ObjectStore(objectStore: personStore);
      ...

【问题讨论】:

只是尝试输入数字(1、2 和 3)而不是纯文本......它的排序仍然与上图相同。我不明白,数据网格是否可以同时基于“kerberos”列和另一列进行排序?只是认为它会是有线的,因为我没有在任何地方定义它:/ 可以看到我正在寻找与比较器映射等效的东西。我尝试在数据网格上使用comparatorMap(例如:myGrid.comparatorMap["kerberos"] = function(a,b);)但我没有解决我的排序问题:/ 【参考方案1】:

我找到了答案。问题在于ObjectStore。这家商店(出于某种原因)无法正确排序,在将商店类型更改为ItemFileReadStore 后,它会正确排序。切换存储的另一个原因是ItemFileReadStore 还支持允许自定义排序的comparatorMap 属性,ObjectStore 不支持此属性。

解决方案:

load: function(jsondata)      
      var store = new ItemFileReadStore(
        data:  identifier: "id", items: jsondata 
      );

      pgrid = new DataGrid(
        store: store,
        ...

【讨论】:

以上是关于为啥这个数据网格以奇怪的顺序排序?的主要内容,如果未能解决你的问题,请参考以下文章

如何从数据网格中获取已排序的项目源

如何根据多列对 flex 数据网格进行排序?

顺序导入.obj文件变得非常快速

为啥我的锐浪报表明细网格第一行不显示数据

为啥添加两个 .OrderBy(或 .OrderByDescending)语句会以相反的顺序应用排序?

以编程方式对 wpf 数据网格进行排序