2009-04-29 5 views
0

GridView에 내장 된 Entity Framework를 사용하여 정렬 할 때 외래 키 값을 표시 할 수 있습니다. 예를 들어 ...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별로 정렬하지 않습니다.

아이디어가 있으십니까?

답변

3

저는 SqlDataSources를 사용하여 기존 ASP.NET 응용 프로그램을 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"을 사용하여 역할 이름 열의 정렬을 제어 할 수 있습니다.

호프가 도움이되기를 바랍니다.

+0

답변으로 표시되어야합니다, 멋진 게시글 –

+0

어떻게 찾았습니까? 이것이 * 어디에서든지 * 문서화되어 있습니까? 나는이 대답이 거의 4 살이라는 것을 알지만, 누군가가 이것에 관해 밝혀 줄 수 있다면 좋을 것이다. 나는 이것이 작동하지 않을 것으로 예상했기 때문에 좋겠지 만, 실제로 그렇게했다. – Vivelin

관련 문제