我有一个GridView,其中一列绑定到包含可空整数的对象属性。我将SortExpression设置为属性的名称,只要所有行都包含值,排序就可以完美地工作。但是,如果任何行包含null,则会出现异常:
System.InvalidOperationException:无法比较数组中的两个元素。对象引用未设置为对象的实例。
如何自定义排序或比较逻辑以处理空案例?
答案 0 :(得分:3)
Nullable类型公开了一种比较可空类型的比较方法,因此解决方案是覆盖gridview排序逻辑并手动指定比较:
gridview.Sorting += new GridViewSortEventHandler(gridView_Sorting);
protected void gridView_Sorting(object sender, GridViewSortEventArgs e)
{
// Only add custom handling for the sort expression on the
// Nullable<int> column
if (e.SortExpression == "MySortExpression")
{
// Convert datasource to a List<T>
list.Sort(new Comparison<MyObjectType>(delegate(MyObjectType item1, MyObjectType item2)
{
return Nullable.Compare<int>(item1.NullableIntProp, item2.NullableIntProp);
}));
// Bind the sorted list back to the gridview
}
else
{
// delegate to the gridview to handle its own sorting
}
}
答案 1 :(得分:0)
您还可以在绑定数据时覆盖null,而是放置0。你的答案要好得多。 :)
您还可以创建一个覆盖Compare运算符的自定义类型。但这只会复制(并使之复杂)上面的内容。