0

GridView のビルトイン Entity Framework での並べ替えを使用すると、外部キーの値を表示できます。例えば...

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

...しかし、ヘッダーをクリックしてグリッド内のアイテムを並べ替えると、リスト リストを 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 で並べ替えられません。

何か案は?

4

1 に答える 1

3

既存の ASP.NET アプリケーションを SqlDataSources から EntityDataSources に移行しているため、ここ数日間、これを理解しようとしています。「it」を配置する必要があることがわかりました。声明の前に。

したがって、上記の例を使用すると、次のように作成する必要があります。

<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" を使用して、ロール名列の並べ替えを制御できます。

これが、答えを探している他の誰かに役立つことを願っています。

于 2009-11-06T15:00:30.870 に答える