Dojo DataGrid基于JSON数据插入图像

时间:2013-07-30 20:15:16

标签: json dojo dojox.grid.datagrid

我的JSON数据如下:

"items": [
{
    "batch": "sectionA",
    "full": "N",
    "numStudents": 2,
    "students": [
        {
            "name": "John",
            "married": "Y"

        },
        {
            "name": "Mary",
            "married": "N"
        }
    ]
},
{
    "batch": "sectionB",
    "full": "Y",
    "numStudents": 3,
    "students": [
        {
            "name": "John",
            "married": "Y"

        },
        {
            "name": "Mary",
            "married": "N"
        },
        {
            "name": "Sam",
            "married": "N"
        }
    ]
}

我迭代这个JSON并创建一个DataGrid,其中:item []。batch是Header列。 项目[]。students []。name是列下的行。此JSON将生成一个包含2个标题列和3行的DataGrid。第1列(" SectionA")将在其下方仅填充两个单元格。第2列(" SectionB")下面有3个单元格填充。

我可以在网格中显示它,没有任何问题。但我需要添加逻辑,其中if:item []。students []。married =" Y"然后我必须在单元格中的学生姓名旁边显示一个小图像。

同样,如果项目为[]。完整=" Y"然后我必须以不同的颜色显示标题列。

有什么建议吗?这最近一直在咀嚼我的大脑

2 个答案:

答案 0 :(得分:0)

看一下这个帖子:How to add button or images to dojo grid

Storing image in dojo datagrid

我猜测它可以帮助您解决问题。

此致

答案 1 :(得分:0)

我通过改变用于网格的结构来处理dojo数据网格中的图像。像下面的片段。这也允许您将网格列的大小调整为您正在使用的图像文件的大小。

var marryflag;

(function() {
mygrid.list.structure = [    
{
   cells: [
              [
                {name: 'Married', width: '17%', field: "married",hidden: true,
                    formatter: function(inValue) {
                        marryflag = inValue;
                    } // end formatter function
                },
                {name: 'Name', width: '20px', field: "name",                        
                    formatter: function(inValue) {
                        this.customStyles.push("vertical-align:middle");
                        return "<img src=\"/url_path_to_image/" + inValue + "\" alt=\"" + inValue + "\" width=\"16px\" height=\"16px\" style=\"vertical-align: middle\" /> ";                           
                    }                       
                }
              ]
           ]
      }                                                                                                                                                                
];
})();