12 Aug
2006

Sortierung einer ObjectDataSource

 

Seit ASP.NET 2.0 gibt es die ObjectDataSource mit der man einfach jegliche Objekte an Controls wie z.B. das GridView binden kann. Das GridView z.B. erlaubt das automatische sortieren der Daten, jedoch kann es sein das die Daten die von der ObjectDataSource angeliefert werden nicht automatisch sortierbar sind (z.B. bei Arrays). Doch auch dies ist mit der ObjectDataSource lösbar, dazu muss zusätzlich zur Klasse und Select-Methode noch der [b]SortParameterName[/b] festlegt werden. Dazu muss die Klasse natürlich eine entsprechende Methode mit diesem Parameter definiert haben. [code] [/code] Dies veranlasst die ObjectDataSource die Methode [b]GetEmployees(string sortExpression)[/b] für das holen und sortieren der Daten aufzurufen. Als Wert erhält man eine kommaseparierte Liste von Werten übergeben bei denen jeweils mit "ASC" oder "DESC" die Sortierrichtung angegeben wird. Wobei "ASC" auch gerne mal nicht übergeben wird. Kurz gesagt, es entspricht der ORDER BY-Syntax von SQL. Sofern die ORDER BY Syntax nicht direkt unterstützt wird muss diese Werteliste nun entsprechend ausgewertet und den eigenen Bedingungen angepasst werden. Hier ein einfaches Beispiel. [c#] [DataObject(true)] public class EmployeeDs { [DataObjectMethod(DataObjectMethodType.Select)] public Employee[] GetEmployees() { return CommonServices.DataDomain.Extent().ToArray(); } [DataObjectMethod(DataObjectMethodType.Select)] public Employee[] GetEmployees(string sortExpression) { if (string.IsNullOrEmpty(sortExpression)) { return CommonServices.DataDomain.Extent().ToArray(); } else { string sortDirection = "ascending"; string[] sort = sortExpression.Split(' '); if (sort.Length == 2 && sort[1] == "DESC") { sortDirection = "descending"; } sortExpression = string.Format("{0} {1}", sort[0], sortDirection); return CommonServices.DataDomain.Extent().OrderBy(sortExpression).ToArray(); } } } [/c#] Dies ist ein gekürztes Beispiel zur Demonstration, mehrere Sortierwerte werden hier nicht berücksichtigt.
Der Eintrag ist mir etwas Wert
 
Comments have been closed on this topic.