对asp:gridview进行排序,该实例包含一些实例包含一些空对象的类

时间:2014-04-10 13:38:34

标签: c# asp.net sorting gridview

我已经将对象列表限制为asp:gridview。此列表中的对象包含一些属性和一些对象。列表对象内的一些对象为null。我已经在gridview boundfields上设置了sort表达式,但是在排序时我得到的例子没有设置为object。如何正确排序?我的意思是如何避免在排序中访问空对象?

class A
{
   int value {get; set;}
   string name {get; set;}
   B insideobj;
}

class B
{
}

我尝试对A对象列表进行排序,一列按B对象内的属性排序,但有时B对象在A对象中为null,当它为null时,使用sort expression throw错误进行默认排序。

1 个答案:

答案 0 :(得分:0)

通过类型List<A>的属性对B进行排序时避免问题的最佳方法是在insideobj成员A中没有空引用。您可以使用Null Object pattern并将空对象的实例分配给列表中没有成员值的项目。这样,排序时空引用不再是问题。

null对象是具有中性属性的B实例(例如string.Empty而不是null),或者是从B派生的,以便共享相同的签名。

示例:

class B
{
   public string PropertyToSortBy { get; set; }

   // Provides the Null object
   public static B Empty
   {
       get
       {
           // Initialize other properties as required
           return new B() { .PropertyToSortBy = string.Empty };
       }
   }
}

要使用Null对象,您可以更改A以初始化insideobj的值:

class A
{
   int value {get; set;}
   string name {get; set;}
   B insideobj = B.Empty;
}

或者,您可以在排序之前更改列表,如下所示:

var list = new List<A>();
// Fill list
// ...
// Fill empty entries
foreach(var item in list.Where(x => x.insideobj == null))
    item.insideobj = B.Empty;
// Continue using the list