2010-08-20 7 views
1

Salut J'ai un DataGridView qui lie XML manuellement.Méthode de tri Linq à XMl

Je souhaite trier les colonnes en cliquant sur l'en-tête de colonne.

Voici la méthode que j'ai écrite: lorsque vous cliquez sur un en-tête de colonne, il saisit l'en-tête de colonne et les données de tri par cet en-tête de colonne.

J'ai aussi mis un interrupteur à bascule (direction) à ce sujet, alors quand à nouveau clic utilisateur, les données peuvent être triées dans des ordres différents (ascendant/descendant)

public BindingSource BindXML(string file, string headerName, bool direction) 
     { 
      XElement record = XElement.Load(file); 
      var q = from r in record.Descendants("record") 
        //ascending order? 
        orderby (string)r.Element(headerName) 
        select new 
        { 
         work_pack = (int)r.Element("work_pack"), 
         Locational_Details = (string)r.Element("Locational_Details"), 
         RegimeName = (string)r.Element("RegimeName") 
        }; 
      if (direction) 
      { 
       //descending order 
       q.OrderByDescending(r => r); 
      } 

      return new BindingSource(q, null);} 

Le problème est l'expression lambda q.OrderByDescending(r => r); doesn « t travail du tout

i a même essayé q.OrderByDescending(r => r.RegimeName)

et q.OrderByDescending(r => r.Element(headerName));

Aucun d'eux ne fonctionne. Toute aide à ce sujet?

Répondre

1

Contrairement à List<T>.Sort() le IEnumerable<T>.OrderBy() n'est pas un tri sur place.
Changez votre code à q = q.OrderByDescending(r => r.HeaderName); et il devrait fonctionner

+0

bien dit +1 :) – cordialgerm