1

株式市場のデータを表示するために使用するsmartGwtListGridがあります。セルの価値を強調できるようにしたいと思います。たとえば、現在の値が最後の値よりも大きい場合は緑に、低い場合は赤に変わります。そのような機能について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」フィールドは、それらの値が固定数より大きいか小さい場合に強調表示されます。同様の強調表示を使用することは可能ですが、値はセル内の前の値と比較する必要がありますか?

Mukulに感謝します

4

2 に答える 2

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>";
        }
    }
});
于 2012-03-01T15:30:39.523 に答える
1

Abhijithの方法に加えて、SmartGWTEnterpriseショーケースでこれを行うための代替方法を見つけました-将来の参照のためにここに貼り付けます。彼らは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;  
            };  
        };  
于 2012-03-02T06:32:18.340 に答える