首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Vaadin-Grid的数字列不按数字排序

Vaadin-Grid的数字列不按数字排序
EN

Stack Overflow用户
提问于 2021-05-11 00:27:31
回答 1查看 88关注 0票数 1

我从数据库中获取了一个数据结果集,并将其填充到一个网格中。虽然我已经设法用数据填充了网格,但对数值列进行排序是对字符串文本形式的值进行排序。

例如:

代码语言:javascript
复制
15
24
26
4
63
9

我的LinkedHashedmap。我已经设法填充了它,并且我使用了一个辅助的私有方法来确定该值是否为数字格式。

这是用于填充网格的主要代码片段:

代码语言:javascript
复制
        int i=0;
        boolean exeflg = false;
        String captn;
        for (Map.Entry<String, String> entry : s.entrySet()) {
            if (gridShowCol == null || gridShowCol[i] > 0) {
                if (gridcolName!=null) 
                    captn= gridcolName[i];
                else captn = entry.getKey();
                if (gridcolAllign!= null) {
                    if (gridcolAllign[i]==1 || gridcolAllign[i]==3) -- If column type is a number or decimal
                        grid.addColumn(h -> h.get(entry.getKey())).setCaption(captn).setStyleGenerator(item -> "v-align-left");
                    else
                        grid.addColumn(h -> h.get(entry.getKey())).setCaption(captn).setStyleGenerator(item -> "v-align-right");
                } else {
                    if (i==0 || !isNumeric(entry.getValue().toString())) -- This is for the header column
                        grid.addColumn(h -> h.get(entry.getKey())).setCaption(captn).setStyleGenerator(item -> "v-align-left");
                    else { 
                        grid.addColumn(h -> h.get(entry.getKey())).setCaption(captn).setStyleGenerator(item -> "v-align-right");
                    }
                }
                                    
                if (!exeflg && gridSelectCol != "") {
                    // Disable selection: will receive only click events instead
                    grid.setSelectionMode(Grid.SelectionMode.NONE);
                    exeflg = true;
                    grid.addItemClickListener(
                        event -> {
                           gridCliickResp(event.getItem());
                    });
                }
            }
            i++;
        }

辅助辅助方法:

代码语言:javascript
复制
public static boolean isNumeric(String strNum) {
    if (strNum == null) {
        return false;
    }
    try {
        double d = Double.parseDouble(strNum);
    } catch (NumberFormatException nfe) {
        return false;
    }
    return true;
}

据说setRenderer不适用于Grid>,那么有没有一种替代方法可以让该列按数字排序呢?

EN

回答 1

Stack Overflow用户

发布于 2021-05-11 00:51:39

1.解决方案

您正在创建一个带有字符串值的列,因此可能使用解析后的双精度值作为列值就足够了。以这种方式,可能使用了双精度的自然顺序。

2.解决方案

如果没有,请使用grid.setComparator() https://vaadin.com/api/platform/14.5.5/com/vaadin/flow/component/grid/Grid.Column.html#setComparator-java.util.Comparator-,如下所示:

代码语言:javascript
复制
import static java.lang.Double.parseDouble;
import static java.util.Comparator.comparingDouble;

column.setComparator(comparingDouble(h -> parseDouble(h.get(entry.getKey()))));
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67474205

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档