2010-12-07 10 views
2

私は、フィールド、RequestedReleaseTimeすることにより、これらのエンティティをソートするだけでなく バインド後にこのシーケンスのエンティティがGridViewでソートされないのはなぜですか?

IQueryable<AccessRequest> filteredRows1; 
// retrieve the last record of each request in its request history 
filteredRows1 = from req in AccessRequestSet 
    group req by req.TaskReferenceId 
    into g 
    let topReq = g.OrderByDescending(r => r.UpdateDate).FirstOrDefault() 
    select topReq; 

IQueryable<AccessRequest> filteredRows = 
    filteredRows1.Where(o => o.Status == "Requested"); 

LINQPad

で作品を作成し、このシーケンス。

filteredRows.OrderBy(p => p.RequestedReleaseTime); 

もう一度DateTimeでグループ化し、別のDateTimeで正常に並べ替えて、LINQPadで確認しました。私はその後、私のGridViewのデータソースへのバインドとしてこれを追加します。

gvRequests.DataSourceID = string.Empty; 
      gvRequests.DataSource = filteredRows; 
      gvRequests.DataBind(); 

私もAllowSorting =「true」を設定し、ソートするために、この行を追加しました。

gvRequests.Sort("RequestedReleaseTime", SortDirection.Ascending); 

私はこの最後の行をDataBindの前後で無駄にしようとしました。このアプローチで何が問題になりますか? OnSortedイベントまたはOnSortingイベント内でこれを実行する必要がありますか?注:私はそれを試み、StackOverflowExceptionを取得しました。私はあなたに頼むべきであることを思い出させました。あらゆる方向への何百万人のおかげで、私は助けてくれます。

答えて

1

実際に元のクエリを変更することはありませんOrderByを呼び出して、代わりにあなたがピックアップする必要があり、元に基づいて新しいクエリ、返されます。私は、GridViewの「並べ替え」を信じる

var filteredRowsOrdered = filteredRows.OrderBy(p => p.RequestedReleaseTime); 

をすることを意図していますデータを取得してソート文字列をそのメソッドに渡すメソッドを呼び出すことを知っているObjectDataSourceのようなもので動作します。残念ながら、これはEntity Frameworkではうまく機能しません。データアクセスクラスでソート式をq = q.OrderBy(...)ステートメントに変換する方法を理解するためのヒントをいくつか考えました。しかし、それは複雑になる可能性があります。

+0

良い点は、文字列のように、彼らは不変です。私は実際に私のアプリケーションで変更されたクエリを使用します。上記のコードはLINQPadでテストしたものです。私は明らかな修正があることを期待していました。 – Blanthor

+0

@Blanthor:あなたは(私の例では何がfilteredRowOrderedさ)注文したクエリにデータソースを設定している場合は、それが正しく注文されるべきです。 – StriplingWarrior

関連する問題