Javascript 如何动态更改单元格格式

Javascript 如何动态更改单元格格式,javascript,css,dojo,dojox.grid,dojox.grid.datagrid,Javascript,Css,Dojo,Dojox.grid,Dojox.grid.datagrid,我已经用dojo实现了一个datagrid,它每5秒更新一次。我使用以下代码来更新datagrid jsonStore.fetch({ query: {id:'*'}, onComplete: function(items, result){ dojo.forEach(items, function(item){ jsonStore.setValue(item, "time" , data.update[0].net

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

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'
        } ];

在我回答这个问题之前,当你说“动态更改单元格格式”时,这只是一个小小的误称

您不是在更改单元格的格式化程序,而是在更改单元格的样式

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

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

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

解决方案1使用onStyleRow 第一步。(连接onStyleRow) connect(grid4,“onStyleRow”,styleRowGridPayment)

第二步。(创建您的
styleRowGridPayment
方法。) 请注意,我添加了formatNetchange作为格式化程序

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

formatNetchange = function(value){
     if(value < 0){
        color = "red";
     } else {
        color = "green";
     }
     return "<span style='color:" + color "'>" + value "</span>";
}
formatNetchange=函数(值){
如果(值<0){
color=“红色”;
}否则{
color=“绿色”;
}
返回“+值”;
}

在我回答问题之前,当你说“动态更改单元格格式”时,这只是一个小小的误称

您不是在更改单元格的格式化程序,而是在更改单元格的样式

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

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

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

解决方案1使用onStyleRow 第一步。(连接onStyleRow) connect(grid4,“onStyleRow”,styleRowGridPayment)

第二步。(创建您的
styleRowGridPayment
方法。) 请注意,我添加了formatNetchange作为格式化程序

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

formatNetchange = function(value){
     if(value < 0){
        color = "red";
     } else {
        color = "green";
     }
     return "<span style='color:" + color "'>" + value "</span>";
}
formatNetchange=函数(值){
如果(值<0){
color=“红色”;
}否则{
color=“绿色”;
}
返回“+值”;
}

答案将在您的DataGrid配置中。你应该把它贴出来。@Hemlock我已经更新了帖子。顺便说一下,你的布局是错误的。除非geticon()返回函数,否则您不会传递处理程序,而是直接从格式化程序中调用函数。从geticon中删除()应该没问题。我在这里尝试过回答它,答案将在DataGrid配置中。你应该把它贴出来。@Hemlock我已经更新了帖子。顺便说一下,你的布局是错误的。除非geticon()返回函数,否则您不会传递处理程序,而是直接从格式化程序中调用函数。从geticon中删除()应该没问题。我已经尝试在这里回答了
formatNetchange = function(value){
     if(value < 0){
        color = "red";
     } else {
        color = "green";
     }
     return "<span style='color:" + color "'>" + value "</span>";
}