es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo enlazar una lista de objetos a Handsontable?

Tengo un objeto json, que contiene los siguientes datos.

var myData = [{
        "sNo": "1.0",
        "boqName": "Instalación de poste 11 KV",
        "unit": "Nos",

        "opportunityBoqOverHeadMasterList": [{
                "opportunityBoqOverHeadMasterId": 14,
                "value": 41.3
            },
            {
                "opportunityBoqOverHeadMasterId": 16,
                "value": 41.3
            },
            {
                "opportunityBoqOverHeadMasterId": 24,
                "value": 100
            }
        ]
    },
    {
        "sNo": "2.0",
        "boqName": "Instalación de poste 33 KV",
        "unit": "Nos",

        "opportunityBoqOverHeadMasterList": [{
                "opportunityBoqOverHeadMasterId": 15,
                "value": 52.92
            },
            {
                "opportunityBoqOverHeadMasterId": 17,
                "value": 52.92
            },
            {
                "opportunityBoqOverHeadMasterId": 25,
                "value": 0
            }
        ]
    },

];

Necesito mostrar el valor de opportunityBoqOverHeadMasterList al lado de la celda de la unidad.
Por favor, ayúdame a mostrar los datos en Handsontable.
Por favor, consulta jsfiddle para un ejemplo funcional: https://jsfiddle.net/Umanath16/aty5wfg7/22/

Tags:  ,

Answer

  1. Avatar for davy.ai

    Para mostrar el valor de opportunityBoqOverHeadMasterList junto a la celda unit en Handsontable, puedes definir una función de renderizado personalizada utilizando el método cell de Handsontable.

    Aquí tienes un ejemplo de cómo puedes lograr esto:

    function customRenderer(hotInstance, td, row, col, prop, value, cellProperties) {
        // Verificar si la columna actual es 'unit' o 'opportunityBoqOverHeadMasterList'
        if (prop === 'unit') {
            // Renderizar la celda de forma normal
            Handsontable.renderers.TextRenderer.apply(this, arguments);
        } else if (prop === 'opportunityBoqOverHeadMasterList') {
            // Obtener el ítem correspondiente del arreglo de datos
            var rowData = hotInstance.getSourceDataAtRow(row);
            var overheads = rowData.opportunityBoqOverHeadMasterList;
    
            // Crear un div para mostrar los valores
            var div = document.createElement('div');
    
            // Recorrer los overheads y añadir sus valores al div
            overheads.forEach(function(item) {
                var span = document.createElement('span');
                span.textContent = item.value;
                div.appendChild(span);
            });
    
            // Añadir el div a la celda y aplicarle estilos
            td.appendChild(div);
            td.style.padding = '2px';
            td.style.whiteSpace = 'nowrap';
            td.style.overflow = 'hidden';
        }
    }
    

    Después de definir la función de renderizado personalizada, puedes establecerla como el renderizador para la columna opportunityBoqOverHeadMasterList utilizando la opción columns:

    var hot = new Handsontable(container, {
      data: myData,
      colHeaders: ['S.No', 'BOQ Name', 'Unit', 'Overheads'],
      columns: [
        {data: 'sNo', readOnly: true},
        {data: 'boqName'},
        {data: 'unit'},
        {data: 'opportunityBoqOverHeadMasterList', renderer: customRenderer}
      ]
    });
    

    Esto mostrará los valores de opportunityBoqOverHeadMasterList como una lista horizontal de números junto a la celda unit, dentro de un div que se estilizará para hacer un desbordamiento y mostrar una barra de desplazamiento horizontal si es necesario.

    Puedes ver el ejemplo funcional con la función de renderizado personalizada incluida en este JSFiddle actualizado: https://jsfiddle.net/Umanath16/aty5wfg7/29/

Comments are closed.