2014-06-10 8 views
0

개체에서 데이터를 바인딩하는 표가 있습니다. Object에는 몇 가지 복잡한 데이터 유형이 있습니다. 다음은 내 코드 ORDERID 및 OrderNumber를하지만 CustomerInfo 재산권 정렬 할 수 있습니다C#의 사용자 정의 데이터 유형 (사용자 정의 특성)의 정렬 문제

등급 :

public class Order 
{  
    public Int32 OrderID{ get; set; } 
    public String OrderNumber { get; set; }   
    public Customer CustomerInfo { get; set;} 
} 

public class Customer 
{ 
    public Int64 CustomerNumber { get; set; } 
    public String FirstName { get; set; } 
    public String LastName { get; set; } 
    public String Phone { get; set; } 
} 

내 프런트 엔드 그리드 열이 나는 통과하고 때 열 중 하나가

<asp:TemplateField HeaderText="Last Name" ItemStyle-Width="15%" SortExpression="OrderCustomerInfo.LastName"> 
    <ItemTemplate> 
     <%# Eval("OrderCustomerInfo.LastName") %> 
    </ItemTemplate> 
</asp:TemplateField> 

입니다 정의하고있다 정렬 식 : OrderCustomerInfo.LastName 아래 열을 인식하지 못합니다 내 정렬 함수, 오류가 발생했습니다 -

인스턴스 속성 'OrderCustome rInfo.LastName ''형식 '에 대해 정의되지 않았습니다. 설명 : 현재 웹 요청을 실행하는 동안 처리되지 않은 예외가 발생했습니다. 오류 및 코드에서 시작된 위치에 대한 자세한 정보는 스택 추적을 검토하십시오.

예외 정보 : System.ArgumentException : - 표현 속성 = Expression.Property (PARAM, COLUMNNAME 인스턴스 속성 'OrderCustomerInfo.LastName는'타입 '주문')

오류 라인에 대한 정의되지 않은);

<%# Eval("OrderCustomerInfo.LastName") %> 

이 누락 : // x.ColumnName

public static IEnumerable<T> OrderBy<T>(this IEnumerable<T> collection, string columnName, SortDirection direction) 
{ 
    ParameterExpression param = Expression.Parameter(typeof(T), "x"); // x 
    Expression property = Expression.Property(param, columnName);  // x.ColumnName 
    Func<T, object> func = Expression.Lambda<Func<T, object>>(  // x => x.ColumnName 
    Expression.Convert(Expression.Property(param, columnName), 
    typeof(object)), param).Compile(); 

    Func<IEnumerable<T>, Func<T, object>, IEnumerable<T>> expression = 
     SortExpressionBuilder<T>.CreateExpression(direction); 
    IEnumerable<T> sorted = expression(collection, func); 

    return sorted; 
} 
+0

'OrderCustomerInfo.LastName' 또는'Order.CustomerInfo.LastName'이어야합니까? – Powerlord

+0

@Powerlord 아니요 이미 동일한 오류가 발생했습니다. "메시지 :"인스턴스 속성 'Order.CustomerInfo.LastName'이 '주문'유형에 대해 정의되지 않았습니다. " – msbyuva

+0

'OrderCustomerInfo'에 'LastName' 속성이 있습니까? – rageit

답변

0

이 문제는이 행되지 않습니다.?

예외 정보 : System.ArgumentException : 'OrderCustomerInfo.LastName가'형 '주문') 그래서

에 대해 정의되지 않은 인스턴스 속성

<%# Eval("Order.CustomerInfo.LastName") %> 
+0

아니요, 해당 클래스를 사용할 데이터 액세스에서 반환 된 개체를 바인딩하고 있습니다 ... 개체 이름이 OrderCustomerInfo이고 속성을 바인딩해야합니다. LastName이므로 OrderCustomerInfo.LastName입니다. – msbyuva

+0

CustomerInfo.LastName으로 변경하면 작동합니까? OrderCustomerInfo가 List 인 것처럼 들립니다. 나는 이것을 시도 할 수 없기 때문에 일이지만 복잡한 오브젝트를 사용하기 위해 함수를 수정할 필요가 있다는 느낌이 든다. 한눈에 중첩 된 속성을 처리 할 것 같지 않습니다. – Elliot

+0

아니요 ... 작동하지 않았습니다 ... 일반 속성에는 적합하지만 사용자 정의 속성에는 적합하지 않습니다. – msbyuva

0

예외는 그 상태 SortExpressionEval을 다음과 같이 업데이트해야한다고 생각합니다.

<asp:TemplateField HeaderText="Last Name" ItemStyle-Width="15%" SortExpression="CustomerInfo.LastName"> 
    <ItemTemplate> 
     <%# Eval("CustomerInfo.LastName") %> 
    </ItemTemplate> 
</asp:TemplateField> 
+0

이전의 commnets에서 언급 한대로 업데이트되었습니다 ... 그것은 작동하지 않았다. 내가 복합체 타입을 지원하기 위해 OrderBy 기능을 조정할 필요가있다. – msbyuva