SmartGWT ListGrid на лету / динамическое выделение - PullRequest
1 голос
/ 01 марта 2012

У меня есть 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" подсвечиваются, если их значения больше или меньше фиксированного числа. Можно ли использовать подобное выделение, но значение следует сравнить с предыдущим значением в ячейке?

Спасибо и всего наилучшего Mukul

Ответы [ 2 ]

2 голосов
/ 01 марта 2012

Предыдущие значения не сохраняются нигде в модели. Таким образом, сравнение не может быть сделано из коробки.

Возможное решение этой проблемы - создать дубликаты полей сетки скрытого списка, например 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 голос
/ 02 марта 2012

В дополнение к методу Абхиджита, нашел альтернативный метод для этого в витрине 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;  
            };  
        };  
...