私は Entity Framework 4.0 POCO に取り組んでおり、テーブル/エンティティの主キー以外のフィールドを使用してリスト ページのグリッドを並べ替える方法を探しています。カスタム ページを追加したくありませんが、それは解決策の 1 つですが、それ以外の方法で行うことができればオーバーヘッドになるためです。
前もって感謝します。
私は Entity Framework 4.0 POCO に取り組んでおり、テーブル/エンティティの主キー以外のフィールドを使用してリスト ページのグリッドを並べ替える方法を探しています。カスタム ページを追加したくありませんが、それは解決策の 1 つですが、それ以外の方法で行うことができればオーバーヘッドになるためです。
前もって感謝します。
返される結果が IEnumerable< YourPocoClass > または IQueryable< YourPocoClass > のようなものである場合は、いつでも .OrderBy(p => p.SomePropertyOtherThanPK) を使用できます。
これを行うことができます:
var list = yourDbContext.YourDbSet.OrderBy(m=>m.Property);
または、クライアントがグリッド フォームから取得した文字列で並べ替えたい場合は、Dynamic Linq を使用できます: http://weblogs.asp.net/scottgu/archive/2008/01/07/dynamic-linq-part-1 -using-the-linq-dynamic-query-library.aspx
次の属性の問題を解決しました。
並べ替え列を追加するための新しい属性クラスを追加しました - DefaultSortOrderColumn
[AttributeUsage(AttributeTargets.Class, AllowMultiple = false)]
public class DefaultSortColumnAttribute : Attribute
{
public DefaultSortColumnAttribute(string sortColumn, bool sortDescending)
{
this.SortColumn = sortColumn;
this.SortDescending = sortDescending;
}
public string SortColumn { get; private set; }
public bool SortDescending { get; private set; }
}
次に、この属性を部分的なエンティティ クラス、つまりエンティティのメタデータ クラスに使用します。これには、並べ替え列を使用する必要があります。
[DefaultSortColumn("YourSortColumn", false)]
public partial class YourDBEntity
{
}
次に、PageTemplates\List.aspx でこの属性を使用して、定義されている sortcolumns があるかどうかを判断し、Page_Load でそれを使用して並べ替えることができます。
MetaTable table = GridDataSource.GetTable();
if (!IsPostBack && table.Attributes.OfType<DefaultSortColumnAttribute>().Count() > 0)
{
string sortColumn = table.Attributes.OfType<DefaultSortColumnAttribute>().FirstOrDefault().SortColumn;
bool sortDescending = table.Attributes.OfType<DefaultSortColumnAttribute>().FirstOrDefault().SortDescending;
GridView1.Sort(sortColumn, sortDescending ? SortDirection.Descending : SortDirection.Ascending);
}
この属性をさらに拡張して、クラスの代わりにプロパティに設定できます。そうすれば、複数の列で並べ替えることができます。
回答者に感謝します。ハッピーコーディング。