2012-09-27 10 views
5

Ich habe eine Slickgrid mit Inline-Filterung (mit DataView). Ich habe jeder Datenzeile eine eindeutige ID zugewiesen und übergebe diese ID (nicht die Zeilennummer) an eine Funktion, die ein Div an einer anderen Stelle auf der Benutzeroberfläche aktualisiert.SlickGrid Zeile ID ändert sich nach dem Filtern

Das funktioniert gut, wenn ich nicht filtere. Aber wenn ich die Spalte vor der Weitergabe der ID filtere, wird die ID so geändert, dass sie die Zeile # widerspiegelt. Es wird sogar eine String-ID in eine Zeilennummer ändern.

Das scheint nur seltsam. Irgendeine Idee was los ist ???

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

Wirklich ... weiß niemand etwas darüber? Es scheint, als ob solch eine gemeinsame Sache so offensichtlich falsch ist! – user1415445

Antwort

14

Wenn Sie bereits Dataview verwenden, dann sollten Sie die Zeilen/Daten aus es (dataView_msc) bekommen, anstatt der ursprünglichen Datenquelle (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); 
}); 

Ich bin mir nicht ganz sicher, was du tust, im Inneren mscToUI() mit dem Wert der angeklickten Zelle und den Wert seiner der Reihe id Eigenschaft planen. Ich denke, es könnte klüger sein, einfach die gesamte Datenobjekt Reihe passieren (item) auf die Funktion und die Vorform alle andere Operationen des Lookup-Methoden des Dataview mit:

  • getIdxById(id) - mit der ID des Elemente, findet den relativen Zeilenindex in die grid`
  • getItem(i) - mit dem Zeilenindex des gefilterten Gitter, die Daten zurückgeben/Einzelteil für die Zeilen
  • getItemById(id) - mit der ID des Elements, kehren die Daten/Element für das Element
  • getItemByIdx(i) - Mit dem Zeilenindex des ungefilterten Gitters, geben Sie die Daten/Artikel für die Zeile zurück
+0

Ich denke, diese Antwort sollte akzeptiert werden! BTW Danke deine Antwort hat mir sehr geholfen! – makim

Verwandte Themen