Question

Disons que j'ai un détail de la commande et l'ordre.
la volonté de vue contient les champs de commande, et une grille Telerik pour les détails
Je maintiens toujours une référence de l'ordre dans la session.

Session["Order"] = order;

et lorsque l'utilisateur ajoute un détail de commande à la grille, je l'enregistrer dans la référence de la commande.

public ActionResult Grid_AddDetail(OrderDetail orderDetail)  {
(Session["order"] as Order).Details.Add(orderDetail);    
}  

le problème est quand je dois mettre à jour la ligne, comment puis-je déterminer quel détail Détails de la commande a été mis à jour?

public ActionResult Grid_UpdateDetail(OrderDetail orderDetail)  {
///how will i compare the element in the details, with the orderDetail?        
(Session["order"] as Order).Details.IndexOf(orderDetail) = orderDetail;
}  

le problème peut être résolu en ajoutant une colonne de numéro de série et comparer les détails entrant avec l'existence dans ma référence, en remplaçant l'égalité:

public overrid Equal(object obj){
return (obj as OrderDetail).Serial == this.Serial;
}

mais je veux la colonne de numéro de série pour être invisible, mais si je le fais, il ne sera pas présenté dans le détail incomming.

Était-ce utile?

La solution 2

ce que je faisais est:
ajouté une colonne appelée série
fait la largeur de colonne mis à 0.

columns.Bound(m => m.Serial).Title("").Sortable(false).Width(0);

et il sera présenté dans (insert, mise à jour) mais le problème de suppression est de lui faire (comme Brett dit) en tant que clé de données.

public ActionResult Grid_AddDetail(OrderDetail orderDetail)  {
  if ((Session["order"] as Order).Details.Count != 0)
     item.Serial= (Session["order"] as Order).Details.Max(d => d.Serial) + 1;
  (Session["order"] as Order).Details.Add(orderDetail);    
 } 

public ActionResult Grid_UpdateDetail(OrderDetail orderDetail)  {
///order detail now contains the serial number.  
(Session["order"] as Order).Details.IndexOf(orderDetail) = orderDetail;
} 

Autres conseils

Si vous voulez juste faire la colonne invisible, je pense que cela devrait aider:

AutoGenerateColumns="false"

Cela vous forcera à générer les colonnes affichant les informations, plutôt que le gridview les créant automatiquement pour vous. Alors maintenant, vous aurez besoin de faire quelque chose comme ça pour obtenir l'ordre d'affichage

<asp:TemplateField>
      <ItemTemplate>
           <b><%# DataBinder.Eval(Container.DataItem, "Order") %>:</b>
      </ItemTemplate>
</asp:TemplateField>

EDIT:

Pour accéder au numéro de série quand il est pas visible, vous devez utiliser DataKeys:

orderDetail.DataKeyNames = new string[] { "Serial" };
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top