对asp:gridview进行排序,该视图绑定到包含一些null对象的类

本文关键字:包含一 绑定 null 对象 视图 gridview asp 排序 | 更新日期: 2023-09-27 17:57:55

我已经将对象列表绑定到asp:gridview。此列表中的对象包含一些属性和一些对象。列表的对象中的某些对象为null。我已经在我的网格视图边界字段上设置了排序表达式,但在排序时,我得到了实例未设置为对象的异常。如何正确排序?我的意思是如何避免在排序中访问空对象?

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

我尝试对A对象的列表进行排序,其中一列按B对象内部的属性排序,但有时B对象在A对象中为null,当它为null时,使用排序表达式进行默认排序会引发错误。

对asp:gridview进行排序,该视图绑定到包含一些null对象的类

根据类型B的属性对List<A>进行排序时,避免问题的最佳方法是在Ainsideobj成员中不具有null引用。可以使用Null对象模式,并将Null对象的实例分配给列表中成员中没有值的项。这样,在排序时,空引用就不再是问题了。

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