3

J'utilise Infragistics igGrid où j'ai plusieurs clés primaires:infragistics Mise à jour igGrid avec primaryKeys composites dans jQuery

$("#grid_selector").igGrid({ 
      autoCommit: true, 
      width: "100%", 
      height: '500px', 
      autoGenerateColumns: false, 
      primaryKey: "TrackTrainId,ClassCode", 
      columns: [ 
       { headerText: "Class Code", key: "ClassCode", dataType: "string" }, 
       { headerText: "Track/Train", key: "TrackTrainId", dataType: "string" }, 
       { headerText: "Cars", key: "NumberOfCars", dataType: "number" }, 
       { headerText: "Loads", key: "LoadEquipments", dataType: "string" }, 
       { headerText: "Empties", key: "EmptyEquipments", dataType: "string" }, 
       { headerText: "Tons", key: "Tons", dataType: "number" }, 
       { headerText: "Feet", key: "Feet", dataType: "number" }, 
      ], 
      features: [ 
       { 
        name: "Updating", 
        editMode: "none", 
        enableAddRow: false, 
        enableDeleteRow: false 
       } 
      ] 
     }); 

La grille aura pas de données au départ. Lorsque l'utilisateur clique sur le bouton Ajouter une ligne, il appelle une autre fonction pour ajouter une nouvelle ligne dans la grille. Voici le code pour ajouter une ligne qui fonctionne bien:

//add rows to the grid to show selected equipments first time 
AddRowForEquipmentSelectedGrid = function (track_info, ul_eq) { 
var selctd = $('#' + ul_eq + ' li.ui-selected'), 
    grid = $("#grid_selector"); 

var rowObj = { 
    "TrackTrainId": track_info.TrackTrainId, 
    "ClassCode": track_info.ClassCode, 
    "NumberOfCars": track_info.NumberOfCars, 
    "LoadEquipments": track_info.LoadEquipments, 
    "EmptyEquipments": track_info.EmptyEquipments, 
    "Tons": track_info.Tons, 
    "Feet": track_info.Feet 
}; 

grid.igGridUpdating("addRow", rowObj); 
}; 

Le problème vient lorsque j'essaie de mettre à jour la ligne de la grille. Comment puis-je passer les clés primaires. Si j'ai une clé primaire alors ce code fonctionne bien. Je passe plusieurs clés comme { "TrackTrainId": track_id, "ClassCode": class_code }.

//on update equipment 
UpdateEquipmentGrid = function (track_id, class_code, total_cars, txt_load, txt_emp, txt_tons, txt_feet) { 
var rowObj = { 
    "NumberOfCars": total_cars, 
    "LoadEquipments": txt_load, 
    "EmptyEquipments": txt_emp, 
    "Tons": txt_tons, 
    "Feet": txt_feet 
}; 
$('#grid_selector').igGridUpdating("updateRow", { "TrackTrainId": track_id, "ClassCode": class_code }, rowObj); 
} 

Je ne sais pas si c'est la bonne façon. Toute suggestion de ce que je fais mal ici.

Répondre

3

Actuellement, l'igGrid ne prend pas en charge les clés primaires composites. Vous pouvez combiner les valeurs des différentes colonnes dans un seul champ et l'utiliser comme clé primaire. Par exemple:

rowObj.CompositeKey = rowObj.ClassCode + "|" + rowObj.TrackTrainId; 

Et vous pouvez mettre à jour la ligne liée en fonction de cette valeur composite:

$("#grid").igGridUpdating("updateRow", "another random string|some random string", { NumberOfCars: 1000 }); 

Vous pouvez vous référer à l'exemple jsFiddle suivante ici: http://jsfiddle.net/2uf32hm3/2/

+0

Je sais que cette option est la dernière solution mais je m'attendais à une façon plus élégante de le faire. En tout cas merci pour votre suggestion. J'attendrai d'autres commentaires à ce sujet. – sarojanand