【问题标题】:How to change cell formatting dynamically如何动态更改单元格格式
【发布时间】:2011-08-28 12:46:06
【问题描述】:

我已经使用 dojo 实现了一个数据网格,它每 5 秒更新一次。我使用以下代码来更新数据网格。

jsonStore.fetch({
         query: {id:'*'},
         onComplete: function(items, result){
         dojo.forEach(items, function(item){
             jsonStore.setValue(item, "time" , data.update[0].netchange);
.....

'data' 是我需要设置到网格的新数据,它是一个 json 对象,如下所示

var data = {"update":[{...}]}

如果 netchage 是负数,我需要做什么,我需要将单元格颜色设置为红色。如果 netchange 是正数,它应该是绿色的。所以我需要一种动态更改单元格格式的方法。有人可以告诉我如何做到这一点。提前致谢

grid4 = new dojox.grid.DataGrid({
            query : {
                Title : '*'
            },
            id : "grid",
            jsId : "grid",
            clientSort : true,
            rowSelector : '0px',
            structure : layout4
        }, document.createElement('div'));
        grid4.setStore(jsonStore);
        dojo.byId("gridContainer4").appendChild(grid4.domNode);

var layout4 = [ {
            field : 'time',
            name : 'time',
            width : '40px',
            formatter: geticon()
        }, {
            field : 'netchange',
            name : 'netchange',
            width : '30px'
        } ];

【问题讨论】:

  • 答案将在您的 DataGrid 配置中。你应该发布那个。
  • @Hemlock 我更新了帖子
  • 顺便说一句,您的 layout4 是错误的。除非 geticon() 返回一个函数,否则您不会传递处理程序,而是直接从格式化程序中调用该函数。把geticon中的()去掉就可以了。
  • 我已经尝试在这里回答stackoverflow.com/questions/16076701/…

标签: javascript css dojo dojox.grid dojox.grid.datagrid


【解决方案1】:

在我回答这个问题之前,当您说“动态更改单元格格式”时,这只是一个微不足道的误称。

您并没有更改单元格formatter,而是更改了单元格的样式。

每次将值加载到单元格中时,都会调用格式化程序。此外,还会为单元格所在的行调用 onStyleROw 函数。

这意味着您有两个选项来更改单元格的颜色。您可以在单元格范围内执行此操作,也可以让格式化程序执行一些简单的操作,例如使用具有不同样式颜色的 <span> 包装值。我会告诉你两个。

这是第一个解决方案,无需更改任何现有网格代码,它将使用 onStyleRow 更改整行。

使用 onStyleRow 的解决方案 1

步骤 1.(连接 onStyleRow)

dojo.connect(grid4, "onStyleRow", styleRowGridPayment);

第 2 步。(创建 styleRowGridPayment 方法。)

var styleGridPayment = function(inRow) {
        if( null !== grid4.getItem( inRow.index ) ) {
            item = grid4.getItem( inRow.index );
            if( item.netchange < 0 ) {
                inRow.customStyles += "color:red;";
            } else {
                inRow.customStyles += "color:green;";
            }
         }
    }   

使用 onStyleRow 应该这样做。

解决方案 2,使用格式化程序

在你的字段声明中,你会有

{
    field : 'netchange',
    name : 'netchange',
    width : '30px'
    formatter: formatNetchange
} 

请注意,我已将 formatNetchange 添加为格式化程序。

然后您只需创建格式化程序。

formatNetchange = function(value){
     if(value < 0){
        color = "red";
     } else {
        color = "green";
     }
     return "<span style='color:" + color "'>" + value "</span>";
}

【讨论】:

    猜你喜欢
    • 2020-03-27
    • 1970-01-01
    • 1970-01-01
    • 2014-06-11
    • 1970-01-01
    • 1970-01-01
    • 2017-11-03
    • 1970-01-01
    • 2015-01-03
    相关资源
    最近更新 更多