2009-04-29 12 views
0

GridViewの組み込みのEntity Frameworkによる並べ替えを使用する場合、外部キー値を表示できます。たとえば...GridViewのEntity Frameworkでの外部キー値によるソート?

<asp:boundfield HeaderText="Category" DataField="Category.Name" SortExpression="Category.Name" /> 

...ただし、ヘッダーをクリックしてグリッド内のアイテムを並べ替えると、リストリストをカテゴリ別に並べ替えることはできますか?

私は、文字列 "Category.Name" を持っているので、私はこれを行うことはできません。

.OrderBy(e => e.Category.Name) 

だから私はしない... ...

private static object GetPropertyValue(object obj, string propertyName) 
{ 
    PropertyInfo propertyInfo = obj.GetType().GetProperty(propertyName); 
    return propertyInfo.GetValue(obj, null); 
} 

// list is List<Widget> 
// with a breakpoint here, ((Widget)list[i]).Companies.Name exists in all Widgets 
list.OrderBy(e => GetPropertyValue(e, "Category.Name")) 

をリフレクションを試してみました作業。スローされた例外はありませんが、Category.Nameでソートされません。

アイデア?

答えて

3

私は、既存のASP.NETアプリケーションをSqlDataSourcesを使用してEntityDataSourcesに移動しているため、ここ数日間、これを理解しようとしています。私はあなたが「それ」を置かなければならないことを知りました。声明の前に

だから上のあなたの例を服用すると、このようにそれを形成する必要があるでしょう:

<asp:boundfield HeaderText="Category" DataField="Category.Name" SortExpression="it.Category.Name" /> 

私はこのようになりますエンティティデータソースがあります。

<asp:EntityDataSource runat="server" ID="edsResourceRoles" ConnectionString="name=SkillsEntities" 
    DefaultContainerName="SkillsEntities" EnableUpdate="true" EnableDelete="true" 
    EnableInsert="true" EntitySetName="ResourceRoles" Where="it.resource_id = @resource_id" 
    Include="Roles,Competency_Level" OrderBy="it.Roles.roles_nm"> 

をし、私SortExpression = "it.Roles.roles_nm"を使用してRoles Name列のソートを制御できます。

これは、誰かが答えを探している人を助けることを期待しています。

+0

これは答えとしてマークする必要があります。nice post –

+0

これはどうやって見つかりましたか?これは*どこに*書かれていますか?私はこの答えがほぼ4歳であることを認識していますが、これがうまくいかないと思っていたので、誰かがこれを見せてくれればいいです。 – Vivelin

関連する問題