【问题标题】:GXT -coloring entire grid row according to one cell in rowGXT - 根据行中的一个单元格为整个网格行着色
【发布时间】:2012-01-12 05:39:16
【问题描述】:

。 . 我根据单元格的值为一列着色,但我想在 gxt 网格中为整行着色(意味着单元格包含的行)帮助我 这是我为单元格着色的代码(我想为行而不是单元格着色)

 /*------------Coloring Area------------*/
                    GridCellRenderer<BeanModelType> ColoredGrid = new GridCellRenderer<BeanModelType>() {

                        @Override
                        public Object render(BeanModelType model,
                                String property, ColumnData config,
                                int rowIndex, int colIndex,
                                ListStore<BeanModelType> store,
                                Grid<BeanModelType> grid) {

                            String valueOfCell =  model.get(property);    
                            String style = valueOfCell.equals("Book") ? "GREEN":
                            valueOfCell.equals("Ersr") ? "red":
                            valueOfCell.equals("Pen") ? "yellow":
                            valueOfCell.equals("comp") ? "blue": "";
                            //Config is the cell and we are setting style here

                            config.style ="background-color:"+style;
                            return valueOfCell; 



                        }    

                        };  
                        System.out.println("COLORRRRR   "+cleanColoredGrid.toString());
                        column.setRenderer(ColoredGrid);  

                    /*-------------Coloring Area Ends-------*/
                    configs.add(column); 

【问题讨论】:

    标签: grid gxt


    【解决方案1】:

    鉴于您使用的是 GXT > 2.x.x,正确的做法是将新的 GridViewConfig 附加到您的网格视图。

    你可能应该这样做:

    grid.getView().setViewConfig(new GridViewConfig() {
            @Override
            public String getRowStyle(ModelData model, int rowIndex, ListStore<ModelData> ds) {
                if (model != null) {
                                        //TODO: put your conditions here
                    if ("YOUR_CONDITION".equals(model.get("BOOK_COLOR))) {
                        return "green-row";
                    }
                }
                return "";
            }
        });
    

    您应该相应地修改您的 CSS。 (注意 green-row 是 CSS 样式类的名称)。

    参考:http://www.jarvana.com/jarvana/view/com/extjs/gxt/2.1.1/gxt-2.1.1-javadoc.jar!/gxt-2.1.1-javadoc/com/extjs/gxt/ui/client/widget/grid/GridViewConfig.html

    【讨论】:

    • 不幸的是,这种方法不适用于动态生成的背景颜色,而仅适用于预定义的类。
    【解决方案2】:

    在每个渲染方法中,您都将模型作为参数之一,因此请尝试为每一列设置相同的渲染器,但将“属性”替换为包含项目类型的字符串的属性名称。假设您将其命名为“itemName”,因此将代码更改为:

    model.get("itemName");  
    

    可能需要强制转换,因为 model.get() 应该返回 Object。

    现在在每一列中都将执行相同的检查,并且所有列都应该使用一种颜色。 如果这可行,下一步可能是一些优化:如果第一次检查返回一些颜色,将其设置为模型到颜色的哈希映射(或直接作为新属性进入模型)并在渲染器中添加一个将检查的条件如果尚未指定颜色。

    【讨论】:

    • 谢谢德努。 . .非常感谢它开始工作了。我将样式声明为全局变量并在第一列中调用了方法,然后样式值(背景颜色)在字符串(样式)中,然后我创建了一个新方法并给出了 config.style=style 。 . .. .
    • 很高兴你让它运行起来。如果您将我的回答标记为“已接受”,我将不胜感激 - 当然,如果您认为我已将您引向正确的方向 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-25
    • 2015-10-11
    • 2013-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-19
    相关资源
    最近更新 更多