Сортировка по значениям внешнего ключа в GridView с Entity Framework? - PullRequest
0 голосов
/ 29 апреля 2009

При использовании встроенной сортировки в GridView с Entity Framework я могу отображать значения внешнего ключа. Например ...

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

... но когда щелкнуть заголовок, чтобы отсортировать элементы в сетке, как я могу отсортировать свой список по категориям.

У меня есть только строка «Category.Name», поэтому я не могу сделать это:

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

Итак, я попробовал Reflection ...

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.

Есть идеи?

1 Ответ

3 голосов
/ 06 ноября 2009

Я пытался выяснить это в течение последних нескольких дней, когда я перемещаю существующее приложение ASP.NET с использования SqlDataSources на EntityDataSources. Я обнаружил, что вы должны разместить «это». перед заявлением.

Итак, взяв пример выше, вам нужно сформировать его следующим образом:

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

У меня есть источник данных Entity, который выглядит следующим образом:

<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".

Надеюсь, это поможет кому-то еще, кто ищет ответ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...