我有一个smartGwt ListGrid,用于显示股市数据。我希望能够突出细胞的价值。例如 - 如果当前值大于最后一个值,则变为绿色,如果较低则变为红色。我查看了smartGWT的任何此类功能的展示,但我只找到了这个示例代码用于突出显示。
new Hilite() {{
setFieldNames("area", "gdp");
setTextColor("#FFFFFF");
setBackgroundColor("#639966");
setCriteria(new AdvancedCriteria(OperatorId.AND, new Criterion[] {
new Criterion("gdp", OperatorId.GREATER_THAN, 1000000),
new Criterion("area", OperatorId.LESS_THAN, 500000)}));
setCssText("color:#3333FF;background-color:#CDEB8B;");
setHtmlAfter(" " + Canvas.imgHTML("[SKIN]/actions/back.png"));
setId("1");
}}
如果“gdp”或“area”字段的值大于或小于固定数字,则会突出显示这些字段。是否可以使用类似的突出显示,但应将该值与单元格中的先前值进行比较?
谢谢和问候 穆库尔
答案 0 :(得分:2)
以前的值不会存储在模型中的任何位置。所以比较不能开箱即用。
可能的解决方案是创建重复的隐藏列表网格字段,如areaPrevious或gdpPrevious。当数据发生变化时,您将填充gdp / area和gdpPrevious / areaPrevious字段。而不是使用hilites,你使用cellFormatters。
gdpField.setCellFormatter(new CellFormatter(){
public String format(Object value, ListGridRecord record, int rowNum, int colNum){
if( record.getAttribute("gdpPrevious") < record.getAttribute("gdp")){
return "<div style=\"width:14px;height:14px;background-color:green;\">+value+ "</div>";
}else{
return "<div style=\"width:14px;height:14px;background-color:red;\">"+value+ "</div>";
}
}
});
答案 1 :(得分:1)
除了Abhijith的方法之外,在SmartGWT Enterprise展示中找到了另一种方法 - 粘贴在这里以供将来参考。他们通过覆盖getCellCSSText方法 -
来实现这一目标 stockQuotesGrid = new ListGrid() {
private int blinkPeriod = 2000;
// Cell animation - go bright green or red on a change, then fades.
protected String getCellCSSText(ListGridRecord record, final int rowNum,
final int colNum) {
// changeValue column
Date lastUpdated = record.getAttributeAsDate("lastUpdated");
if (colNum == 2 && lastUpdated != null) {
long delta = System.currentTimeMillis() - lastUpdated.getTime();
if (delta < blinkPeriod) {
// refresh 10x / second
new Timer() {
public void run() {
stockQuotesGrid.refreshCell(rowNum, colNum);
}
}.schedule(100);
float changeValue = record.getAttributeAsFloat("changeValue");
float ratio = ((float) (blinkPeriod - delta)) / blinkPeriod;
int color = 255 - Math.round(200 * ratio);
if (changeValue > 0) {
return "background-color:#" + Integer.toHexString(color) + "FF"
+ Integer.toHexString(color);
} else if (changeValue < 0) {
return "background-color:#FF" + Integer.toHexString(color)
+ Integer.toHexString(color);
}
} else {
record.setAttribute("lastUpdated", (Date) null);
}
}
// no style override
return null;
};
};