【问题标题】:Smartgwt listgrid on the fly / dynamic highlightingSmartgwt listgrid 即时/动态突出显示
【发布时间】:2012-03-02 14:32:18
【问题描述】:

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

感谢和问候 穆库尔

【问题讨论】:

    标签: smartgwt listgrid


    【解决方案1】:

    以前的值不会存储在模型中的任何位置。因此,不能开箱即用地进行比较。

    一个可能的解决方案是创建重复的隐藏列表网格字段,如 areaPrevious 或 gdpPrevious。当数据更改时,您将填充 gdp/area 和 gdpPrevious/areaPrevious 字段。您使用 cellFormatters 而不是使用 hilites。

    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>";
            }
        }
    });
    

    【讨论】:

    • @Abhijith:感谢您的回答,我还为此找到了另一种替代解决方案。机制是相同的(创建重复的先前值字段或维护更改值字段并将其保留在模型中)。但是,我没有使用 CellFormatter,而是重写了 getCellCSSText 方法来完成此操作。我已经添加了它的代码作为将来参考的答案。再次感谢
    【解决方案2】:

    除了 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;  
                };  
            };  
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-07
      • 1970-01-01
      相关资源
      最近更新 更多