Laden...

Linq sortieren - OnSorting

Erstellt von sra vor 15 Jahren Letzter Beitrag vor 15 Jahren 859 Views
S
sra Themenstarter:in
230 Beiträge seit 2004
vor 15 Jahren
Linq sortieren - OnSorting

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