对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时,使用排序表达式进行默认排序会引发错误。
根据类型B
的属性对List<A>
进行排序时,避免问题的最佳方法是在A
的insideobj
成员中不具有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