Question

J'ai un SmartGWT ListGrid que j'utilise pour afficher les données boursières. Je veux pouvoir mettre en évidence la valeur d'une cellule. Par exemple - si sa valeur actuelle est supérieure à la dernière valeur, tournez en vert et tournez en rouge si elle est inférieure. J'ai regardé la vitrine de SmartGWT pour une telle capacité, mais je n'ai trouvé cet exemple de code pour mettre en surbrillance.

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

Ici, les champs "PIB" ou "zone" sont mis en évidence si leurs valeurs sont supérieures ou inférieures à un nombre fixe. Est-il possible d'utiliser une mise en évidence similaire, mais la valeur doit être comparée à la valeur précédente dans la cellule?

Merci et Cordialement Mukul

Était-ce utile?

La solution

Les valeurs précédentes ne sont pas stockées nulle part dans le modèle. La comparaison ne peut donc pas être faite de la boîte.

Une solution possible à cela est de créer des champs de grille de liste cachée en double comme AreaPrevious ou gdpprevious. Lorsque les données changent, vous remplissez le PIB / zone et les champs GDPPRevious / AreaPrevious. Au lieu d'utiliser des hilites, vous utilisez des formattes de cellules.

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

Autres conseils

En plus de la méthode d'Abhijith, a trouvé une méthode alternative pour le faire dans la SmartGWT Enterprise Showcase - coller ici pour une référence future. Ils ont accompli cela en remplaçant la méthode 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;  
            };  
        };  
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top