Hallo Forum
Ich bin seit kurzem daran Linq (vorwiegend To Sql - ich hoffe ich bin damit im richtigen Forum) in meinen Projekten zu gebrauchen, bin aber bereits relativ schnell an die erste Hürde gestossen. Und zwar habe ich Probleme mein (ASP.NET) Gridview zu sortieren, weil ich nicht die LinqDatasource einsetze.
Im Moment sieht mein Code so aus, dass ich im Page_Load direkt einen Query an die Datasource des Gridviews haue.
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If Not Me.IsPostBack Then
Me.btnFilterAnwenden_Click(Me, Nothing)
End If
End Sub
Protected Sub btnFilterAnwenden_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnFilterAnwenden.Click
Dim msgs = Nachrichten.GetNachrichten
If Not Me.ckFilterTypAllgemein.Checked Then msgs = msgs.Where(Function(p) p.Typ <> 1)
...
Me.grdNachrichten.DataSource = msgs
Me.grdNachrichten.DataBind()
End Sub
sry, wegen VB - eure Antworten und Beispiele dürfen gerne auch in csharp sein, aber das Geschäft... 😠
Naja - jedenfalls klappt das soweit (auch mit den Filtern) tiptop. Nachricht.GetNachrichten bringt ein IQueriable<Nachricht> zurück, das schon so gefiltert wurde, dass nur die eigenen Nachrichten drin sind. Achja - function(p) ist die VB Variante von p =>.
Wie muss ich nun vorgehen, um das Gridview sortiert zu bekommen? Ich habs folgendermassen versucht:
Protected Sub grdNachrichten_Sorting(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewSortEventArgs) Handles grdNachrichten.Sorting
Dim msgs = Nachrichten.GetNachrichten
If e.SortDirection = SortDirection.Ascending Then
If e.SortExpression = "fk_Absender" Then msgs.OrderBy(Function(p) p.fk_Absender)
...
Else
If e.SortExpression = "fk_Absender" Then msgs.OrderByDescending(Function(p) p.fk_Absender)
...
End If
Me.grdNachrichten.DataSource = msgs
Me.grdNachrichten.DataBind()
End Sub
Mir ist klar, dass das noch nicht ganz koscher ist, falls denn ein Filter gesetzt gewesen wäre, dass dieser den Sort nicht überlebt, aber auch das mit dem Sort klappt nicht. Ausserdem wäre eine Variante wünschenswert, in der man der .OrderBy Methode einen String statt eines Lambdas übergeben könnte (oder einen Lambda anhand des Strings dynamisch generieren).
Wäre echt für Hilfe dankbar - finde dazu nichts was ich auch verstehe (da ich mich noch zu wenig mit anonymen Methoden / Lambda Expressions und Linq Expression Trees auseinandergesetzt habe).
Vielen Dank
Gruss
sra
Wenn Zeit in Geschichte übergeht und keine Blüten trägt werden Zukunftsbilder blass //Clueso