C# 排序asp:gridview,它绑定到包含一些空对象的实例的类
我已经将一个对象列表绑定到asp:gridview。此列表中的对象包含一些属性和对象。列表对象中的某些对象为空。我已经在gridview边界字段上设置了排序表达式,但在排序时,我得到了实例未设置为object的异常。如何正确排序?我的意思是如何避免在排序时访问空对象C# 排序asp:gridview,它绑定到包含一些空对象的实例的类,c#,asp.net,sorting,gridview,C#,Asp.net,Sorting,Gridview,我已经将一个对象列表绑定到asp:gridview。此列表中的对象包含一些属性和对象。列表对象中的某些对象为空。我已经在gridview边界字段上设置了排序表达式,但在排序时,我得到了实例未设置为object的异常。如何正确排序?我的意思是如何避免在排序时访问空对象 class A { int value {get; set;} string name {get; set;} B insideobj; } class B { } 我尝试对A对象列表进行排序,其中一列按B对象
class A
{
int value {get; set;}
string name {get; set;}
B insideobj;
}
class B
{
}
我尝试对A对象列表进行排序,其中一列按B对象内的属性排序,但有时B对象在对象中为null,并且当它为null时,使用排序表达式throw error进行默认排序。在排序
列表时避免问题的最佳方法是将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 };
}
}
}
为了使用空对象,您可以更改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
var list=newlist();
//填写清单
// ...
//填空条目
foreach(列表中的变量项,其中(x=>x.insideobj==null))
item.insideobj=B.为空;
//继续使用列表
您使用C#还是VB.NET?你能发布一个类的示例并描述哪些对象是空的吗?我使用C#。添加了示例代码。谢谢,我已经通过将sort expression设置为空解决了我的问题,并为这一列的大小写实现了我自己的排序函数。您的解决方案也可以工作,但我的问题是我使用了我无权访问的类库,它有时返回空引用对象。无论如何,谢谢你的帮助!