Smartgwt listgrid即时/动态突出显示

时间:2012-03-01 08:43:47

标签: smartgwt listgrid

我有一个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”字段的值大于或小于固定数字,则会突出显示这些字段。是否可以使用类似的突出显示,但应将该值与单元格中的先前值进行比较?

谢谢和问候 穆库尔

2 个答案:

答案 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;  
            };  
        };