Lucas_Santos
Lucas_Santos

Reputation: 4740

Set column in datatables according a specific JSON structure

I have a JSON file and I want display in a jquery datatable the DescFatorAvaliacao column using the mDataProp property.

But, I've had some difficulties with that, because of the parent node DesdobramentoList in JSON.

What can I do to put the datatable column set to DescFatorAvaliacao ?

JavaScript Function

function loadAvaliacaoPDI() {
    var gridAvaliacaoPDI = $('#gridAvaliacaoPDI').DataTable({
        language: {
            url: "//cdn.datatables.net/plug-ins/1.10.7/i18n/Portuguese-Brasil.json"
        },
        "sAjaxDataProp": "",
        destroy: true,
        ajax: {
            "url": 'Actions/GetAvaliacaoPDI.ashx',
            "type": "POST"
        },
        "searching": false,
        aoColumns: [
            { mDataProp: "DescFatorAvaliacao" }
        ]
    });
}

$(function () {
    loadAvaliacaoPDI();
});

JSON

[{
    "DesdobramentoList": [{
        "TipoAvaliador": 1,
        "DescFatorAvaliacao": "Usamos os recursos da empresa de forma consciente e responsável."
    },
    {
        "TipoAvaliador": 1,
        "DescFatorAvaliacao": "Assumimos nossos atos independentemente de sucesso ou fracasso, não damos desculpas."
    },
    {
        "TipoAvaliador": 1,
        "DescFatorAvaliacao": "Agimos como se fôssemos sócios da empresa"
    }]
}]

UPDATE EDITING THE SOLUTION PROPOSED BY @DSH

        "dataSrc": function (json) {                
            for (var i = 0, ien = json.length ; i < ien ; i++) {
                for (var z = 0; z < json[i].DesdobramentoList.length; z++) {
                    var descricaoFator = json[i].DesdobramentoList[z].DescFatorAvaliacao;
                    json[i].DescFatorAvaliacao = descricaoFator;
                }                    
            }                
            return json;
        }

Upvotes: 0

Views: 274

Answers (1)

dsh
dsh

Reputation: 12213

Use the ajax.dataSrc option to tell DataTables the data is found in DesdobramentoList instead of data.

var gridAvaliacaoPDI = $('#gridAvaliacaoPDI').DataTable({
    language: {
        url: "//cdn.datatables.net/plug-ins/1.10.7/i18n/Portuguese-Brasil.json"
    },
    destroy: true,
    ajax: {
        url: 'Actions/GetAvaliacaoPDI.ashx',
        type: "POST",
        dataSrc: "0.DescFatorAvaliacao"
    },
    searching: false,
    columns: [
        { data: "DescFatorAvaliacao" }
    ]
});

PS. I think you meant to return a single object, not a list containing a single object in your JSON.

Upvotes: 2

Related Questions