2016-02-22 7 views
7

Ho un Handsontable come segue:Handsontable viene rinfrescato l'intera colonna, tranne la cella di modifica dopo modifica

ordertable = new Handsontable(container, { 
    data: data, 
    colHeaders: ['Customer', 'Mode', 'Remarks', 'Due', 'Recieved'], 
    columns: [{ 
     data: 2, 
     readOnly: true 
    }, { 
     data: 6, 
     type: 'autocomplete', 
     source: collectionmethod, 
     validator: collectionmethod_validations, 
     strict: true 
    }, { 
     data: 5, 
     readOnly: false 
    }, { 
     data: 4, 
     readOnly: true, 
     type: 'numeric', 
     format: '0.00' 
    }, { 
     data: 3, 
     type: 'numeric', 
     format: '0.00', 
     validator: amt_validations, 
     allowInvalid: true 
    }], 
    minSpareRows: 0, 
    rowHeaders: true, 
    contextMenu: ['row_above', 'row_below', 'remove_row', 'undo', 'redo'], 
    colWidths: [150, 100, rest, 100, 100], 
    autoWrapRow: true, 
    autoWrapCol: true, 
    beforeRemoveRow: removerow_validation 

}); 

ho una casella di controllo. E quando faccio clic sulla casella di controllo, il valore di Due (4a colonna) deve essere compilato su "Ricevuto" (colonna). Se lo deseleziono, lo Received dovrebbe essere vuoto, che è lo stesso del carico della tabella.

Quello che faccio è la seguente:

$("#sel_prefill").click(function() { 
    if ($("#sel_prefill:checked").val()) { 
     var g = $('.htCore').find('tbody tr td:nth-child(5)'); //Due 
     var f = $('.htCore').find('tbody tr td:nth-child(6)') // Recieved 
     g.each(function(i, v) { 
      f.eq(i).text(g.eq(i).text()); 
      $(v).css({ 
       'text-align': 'right' 
      }); 
     }); 
    } else { 
     var g = $('.htCore').find('tbody tr td:nth-child(5)'); //Due 
     var f = $('.htCore').find('tbody tr td:nth-child(6)') // Recieved 
     g.each(function(i, v) { 
      f.eq(i).text(""); 
      //$container.handsontable('setDataAtCell', 1, 4, 5); 
      $(v).css({ 
       'text-align': 'right' 
      }); 
     }); 
    } 
}); 

Si sta lavorando bene.

Ma il problema è che dopo aver controllato checbox il valore di 4la colonna è popolata in 5a. Ma if I edit any cell from 5th column, then the entire column except editted cell gets refreshed and 5th column becomes blank..

Come posso evitarlo.

prega di fare riferimento le foto per passo passo i dettagli:

STEP 1

STEP 2

STEP 3

Come posso evitare di aggiornare le cellule dopo la modifica?

+0

Credo che il tuo problema è questo f.eq (i) .text '("") – madalinivascu

+0

@madalin ivascu ok amico. Quindi cosa dovrei cambiare? Qual è il tuo suggerimento? Puoi elaborare e postare come risposta? sarà così utile. – Santhucool

+0

@ madalin ivascu che è solo un caso di miglioramento del codice. Non penso che lo farà Perché dopo la modifica non si chiama affatto quella funzione. Chiama alcune funzioni incorporate. Devo modificarlo in modo tale da poter gestire il mio problema. – Santhucool

risposta

0

Il problema si è verificato perché è necessario aggiornare l'array di dati dopo aver modificato il valore della riga in un altro. Quando cambio il contenuto, cambia solo sullo schermo. Mentre quando modifico la cella chiamerà la funzione render e prenderà il vecchio array di dati che è il motivo per cui sta mostrando la colonna senza valore.

Ecco la mia soluzione:

In caso:

g.each(function(i, v) { 
      f.eq(i).text(g.eq(i).text()); 
      data[i][3] = g.eq(i).text(); //Need to update the array also 
     }); 

In altro:

g.each(function(i, v) { 
      f.eq(i).text(""); 
      data[i][3] = ""; //Need to update the array also 
     }); 
Problemi correlati