2012-09-27 21 views
5

Tengo un slickgrid con filtro en línea (usando DataView). He asignado una ID única a cada fila de datos y paso esta identificación (no el número de fila) a una función que actualiza un div en otro lugar en la interfaz de usuario.SlickGrid Fila ID cambia después de filtrar

Esto funciona bien si no filtro. Pero si filtro la columna antes de pasar la identificación, cambia la identificación para reflejar la fila #. Incluso cambiará una ID de cadena a un número de fila.

Eso parece extraño. ¿¿¿Tienes idea de lo que está pasando???

grid_msc.onClick.subscribe(function(e, args) { 
    var cell = grid_msc.getCellFromEvent(e); 
    var row = cell.row;    // get row # 
    var row_ID = data_msc[row].id; // get the row ID, not row # 
    var msc = data_msc[args.row][grid_msc.getColumns()[args.cell].field]; 

    alert("Row#:"+row+", RowID:"+row_ID+", Value:"+msc); 
    mscToUI(msc, row_ID); 
}); 


// Add the selected item to the UI 
    function mscToUI(addC, cellNum) { 
     alert(addC+", "+cellNum); 
     $('#selectedMsc').append('<a href="javascript:removemsc('+cellNum+')" id="'+cellNum+'" class="rSel"><img src="images/remove.png" align="texttop" border="0" style="padding-right:4px;">'+addC+'<br /></a>'); 
    } 
}) 
+0

... Realmente nadie sabe nada de esto ?? ¡Parece una cosa tan común de hacer que es tan obvio que está mal! – user1415445

Respuesta

14

Si ya está utilizando DataView entonces que debería estar recibiendo las filas/datos de que (dataView_msc), en lugar de la fuente de datos original (data_msc).

grid_msc.onClick.subscribe(function(e, args) { 
    var cell = grid_msc.getCellFromEvent(e); // get the cell 
    var row = cell.row; // get the row's index (this value will change on filter/sort) 
    var item = dataView_msc.getItem(row); // get the row's item (see: object, data) 
    var msc = item[grid_msc.getColumns()[cell.cell].field]; // get the value of the cell 

    alert("Row Index:"+row+", RowID:"+item.id+", Cell Value:"+msc); 
    console.log(item); 
    mscToUI(msc, item.id); 
}); 

no estoy muy seguro de lo que estás pensando en hacer dentro mscToUI() con el valor de la celda se hace clic y el valor de la propiedad de su fila id. Creo que podría ser más inteligentes simplemente pasar todo el objeto de datos de la fila (item) a la función y la preforma cualesquiera otras operaciones usando métodos de búsqueda de la DataView:

  • getIdxById(id) - con el ID del elemento, encontrar el índice de la fila relativa en la grid`
  • getItem(i) - Con el índice de la fila de la grilla filtrada , devuelve los datos/artículo para dicha fila
  • getItemById(id) - con el ID del elemento, devolver los datos/artículo para dicho elemento
  • getItemByIdx(i) - Con el índice de la fila de la rejilla sin filtrar , devolver los datos/artículo para dicha fila
+0

¡Creo que esta respuesta debe ser aceptada! Por cierto, ¡gracias su respuesta ayudó mucho! – makim

Cuestiones relacionadas