我有一个网格,我正在从一个对象中获取数据。对象有一些复杂的数据类型。下面是我的代码能够排序ORDERID和OrderNumber但不是CustomerInfo属性
班级:
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它不能识别下面的列是我的排序函数,我收到错误 -
Instance property&#39; OrderCustomerInfo.LastName&#39;未定义类型&#39;订单&#39; 描述:执行当前Web请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。
异常详细信息:System.ArgumentException:Instance属性 &#39; OrderCustomerInfo.LastName&#39;未定义类型&#39;订单&#39; )
错误行 - 表达式属性= Expression.Property(param,columnName); // 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 :(得分:0)
问题不在于这一行:
<%# Eval("OrderCustomerInfo.LastName") %>
缺少一个。?
<%# Eval("Order.CustomerInfo.LastName") %>
答案 1 :(得分:0)
该例外说明:
异常详细信息:System.ArgumentException:Instance属性 &#39; OrderCustomerInfo.LastName&#39;未定义类型&#39;订单&#39; )
因此,我认为您需要将SortExpression
和Eval
更新为:
<asp:TemplateField HeaderText="Last Name" ItemStyle-Width="15%" SortExpression="CustomerInfo.LastName">
<ItemTemplate>
<%# Eval("CustomerInfo.LastName") %>
</ItemTemplate>
</asp:TemplateField>