4

現在、ASP.NET 動的データ エンティティは、すぐに使用できるブール値または外部キーの関係でのフィルター処理のみをサポートしています。

行をフィルター処理するための値のドロップダウン リストに基づいて、カスタム フィルターを実装するにはどうすればよいですか?

4

2 に答える 2

0

ASP.NET 動的データが使用する意図したテンプレート システムに適合するように、これを行う方法を考え出しました。

基本的に、これに関する問題は、コンパイル時に、フィルタリングされる可能性のある基になる列が何であるか、ましてや、それがどのタイプまたは列名であるかがわからないことです-解決策を実装するための道に私を導いた最初の手がかりは、 Filter コントロールにはすべて GetQueryable メソッドがあります

残念ながら、このメソッドはIQueryableではなくのインスタンスで機能IQueryable<T>するため、標準の LINQ 演算子を単純に使用することはできません。必要なのは、動的に述語を作成する方法です (または述語のチェーンでも - この場合、私がやりたかったのは、個別のエントリを取得して並べ替えることだけでした)。IQueryable

残念ながら、Dynamic LINQ のすぐに使用できる実装はありません。したがって、式ツリーを使用する必要があります。この問題を解決する方法の 2 つ目のヒントは、IQueryableオブジェクトが .Expressions コレクションを公開しているという事実です。

必要なことは、述語を表す式ツリーを作成し (この場合、distinct を選択するため)、それを にアタッチしてIQueryable返すことです。これは確かに明白な作業でも簡単な作業でもありませんでした。また、式ツリーを理解するのは簡単ではありませんでしたが、問題を解決する方法はそこにありました。

于 2011-07-26T22:12:36.350 に答える
0

where パラメーターを GridView のデータソースに追加するだけで、同様のことを行いました。ユーザーがドロップダウンから Color Code 9 を選択したとします。Pag​​e_Init で、パラメーターを設定します。

Parameter p = new Parameter { Name = "ColorSelection", Type = TypeCode.Int32, DefaultValue = "9" };
GridDataSource.WhereParameters.Add(p);
GridDataSource.Where = "ColorId == @ColorSelection";
于 2011-07-26T18:32:49.997 に答える