【问题标题】:ZK listbox sort multiple columnsZK 列表框对多列进行排序
【发布时间】:2018-05-28 15:28:25
【问题描述】:

在正常情况下,没有大数据,甚至没有分页,如何使用多列对 ZK 列表框进行排序?

按第一列排序,按第二列排序,依此类推。

除非你再次点击它,否则你如何保持标题标签上的排序图标完好无损?

我有一个 ZK 版本 7.0.3 供参考。

【问题讨论】:

    标签: listbox zk


    【解决方案1】:

    使用 MVVM 并在视图模型中进行实际排序。在视图模型中有一个自定义比较器 sorts on multiple fields。您的可排序列表框列表标题如下所示:

    <listheader label="Name" sort="auto(each.name)" onSort="@command('nameSort', asc=event.isAscending())" />
    

    在您的视图模型中:

    @Command
    @NotifyChange("names")
    public void nameSort(@BindingParam("asc") final boolean isAscending) {
        // modify your custom comparator
    }
    

    顺便说一句,如果您没有大数据并且不使用分页,您真的需要对多个字段进行排序吗?

    【讨论】:

    • 感谢 Col,我确实使用了 MVVM,老实说,我从未想过使用此命令参数进行排序。经过几个小时的思考,我以一种奇怪的方式解决了这个问题。我使用 MVVM,我使用一个对象,该对象包含一个已排序的键数组和它们的类型。当我单击一列时,将存储排序模式和标签 ID。或更换。然后数据真正从 db 调用中得到更新和排序。这也是一个具有分页功能的数据库调用。我确实有分页,并且我确实有一个大型数据集,我将这些约束放在问题中只是为了简单和问题的容易性
    • 从示意图上说是这样的:用户点击列,触发事件 onSort 参考列的键 ID 和排序模式更新中介对象,然后事件 onPaging 获取列表框的页面(或零缺席),然后点击数据库。唯一难看的是,我不得不在列表头中添加一个额外的按钮,该按钮变成“自然”的顺序。因此用户可以重置列的排序方法。由于 listheader 似乎没有三态排序模式。
    • 您应该添加一个答案并为将来遇到相同问题的人接受它;否则它看起来像一个未解决的问题。很高兴你把它整理好了。
    【解决方案2】:

    它甚至可以更容易,因为自动排序也支持多个字段。

    sort="auto(lastName, firstName)" 
    

    像这样,标题图标不需要额外的代码。

    【讨论】:

      猜你喜欢
      • 2010-11-20
      • 1970-01-01
      • 1970-01-01
      • 2019-08-31
      • 2015-11-07
      • 2011-04-09
      相关资源
      最近更新 更多