2012-09-27 15 views
5

Mam slickgrid z wbudowanym filtrowaniem (przy użyciu DataView). Przypisałem unikatowy identyfikator do każdego wiersza danych i przekazuję ten identyfikator (nie numer wiersza) do funkcji, która aktualizuje div w innym miejscu w interfejsie użytkownika.Identyfikator SlickGrid Row zmienia się po filtrowaniu

Działa to dobrze, jeśli nie filtruję. Ale jeśli filtruję kolumnę przed przekazaniem identyfikatora, zmienia ona identyfikator, aby odzwierciedlał wiersz #. Zmienia nawet identyfikator ciągu na numer wiersza.

To wydaje się dziwne. Masz pojęcie, co się dzieje ???

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

Naprawdę ... nikt nic o tym nie wie? Wygląda na to, że tak powszechna rzecz jest tak błędna! – user1415445

Odpowiedz

14

Jeśli używasz już DataView następnie powinny być coraz rzędów/dane z to (dataView_msc) zamiast oryginalnego źródła danych (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); 
}); 

Nie jestem pewien, co planujesz robić wewnątrz mscToUI() z wartością kliknął komórce i wartości jego rzędzie za id nieruchomości. Myślę, że może to być mądrzejszy po prostu przejść cały obiekt danych rzędu'S (item) do funkcji i preform żadnych innych operacji przy użyciu metod Lookup DataView za:

  • getIdxById(id) - o id elementu, znajdź względny indeks wiersz grid`
  • getItem(i) - z indeks wiersza przefiltrowanego siatki powrócić dane/pozycja dla wymienionego rzędu
  • getItemById(id) - z Id elementu, powrót danych/element dla wspomnianego elementu
  • getItemByIdx(i) - Przy indeksie wiersza niefiltrowanej siatki , zwróć dane/pozycję dla wspomnianego rzędu
+0

Myślę, że ta odpowiedź powinna zostać przyjęta! BTW Dzięki, że Twoja odpowiedź bardzo pomogła! – makim

Powiązane problemy