如何解决Vaadin-Grid 的数值列不按数字排序
我有一个从数据库中获取的数据结果集,并将其填充到网格中。虽然我已经设法用数据填充网格,但对数值列进行排序会以字符串文本形式对值进行排序。
例如:
15
24
26
4
63
9
我的数据集采用 LinkedHashedmap
这是用于填充网格的主要代码片段:
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++;
}
辅助辅助方法:
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
解决方法
1。解决方案
您正在创建一个带有字符串值的列,因此可能使用解析的双精度作为列值就足够了。这样可能使用了 Double 的自然顺序。
2.解决方案
如果不是,请使用 grid.setComparator()
https://vaadin.com/api/platform/14.5.5/com/vaadin/flow/component/grid/Grid.Column.html#setComparator-java.util.Comparator- 像这样:
import static java.lang.Double.parseDouble;
import static java.util.Comparator.comparingDouble;
column.setComparator(comparingDouble(h -> parseDouble(h.get(entry.getKey()))));
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。