2014-06-10 19 views
0

我有一個網格,我正在對來自對象的數據進行排序。對象有一些複雜的數據類型。下面是我的代碼能夠分揀ORDERID和訂單號碼BUT NOT 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'未定義爲'Order'類型 描述:執行當前Web請求期間發生未處理的異常。請查看堆棧跟蹤以獲取有關該錯誤的更多信息以及源代碼的位置。

異常詳細信息:System.ArgumentException: - Expression屬性= Expression.Property(PARAM,COLUMNNAME Instance屬性 '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 no我已經嘗試過了,我收到了同樣的錯誤 - 消息:「實例屬性'Order.CustomerInfo.LastName'沒有爲類型'Order'定義」 – msbyuva

+0

您的'OrderCustomerInfo'是否有'LastName'屬性? – rageit

回答

0

是問題不是這一行:

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

缺少?

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

不,我綁定數據訪問返回的對象,它將使用這些類...對象名稱是OrderCustomerInfo,並且需要綁定屬性是LastName,因此它是OrderCustomerInfo.LastName – msbyuva

+0

是否將其更改爲CustomerInfo.LastName?這聽起來好像OrderCustomerInfo是一個列表。我是一個工作,所以我不能嘗試這個,但我有一種感覺,你的功能也需要修改,以處理複雜的對象。一目瞭然,它看起來不會處理嵌套的屬性 – Elliot

+0

沒有它沒有工作....它對常規屬性,但不是自定義屬性正常工作.. – msbyuva

0

的例外規定:

異常詳細信息:System.ArgumentException: 'OrderCustomerInfo.LastName' 沒有爲類型 '訂單')

所以我定義的實例屬性估計你需要將SortExpressionEval更新爲:

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

我更新爲我在以前的通信中提到的...它沒有工作..可能是我需要調整OrderBy函數來支持完整類型.. – msbyuva

相關問題