【问题标题】:How to sort gridview by column containing nullable integer?如何按包含可空整数的列对gridview进行排序?
【发布时间】:2010-09-15 02:45:04
【问题描述】:

我有一个 GridView,其中一列绑定到一个包含可为空整数的对象属性。我将 SortExpression 设置为属性的名称,只要所有行都包含一个值,排序就可以完美地工作。但是,如果任何行包含 null,我会得到一个异常:

System.InvalidOperationException:无法比较数组中的两个元素。对象引用未设置为对象的实例。

如何自定义排序或比较逻辑以处理 null 情况?

【问题讨论】:

    标签: asp.net gridview


    【解决方案1】:

    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
        }
    }
    

    【讨论】:

      【解决方案2】:

      您也可以在绑定数据时覆盖 null,而是放置一个 0。你的答案要好得多。 :)

      您还可以创建一个覆盖比较运算符的自定义类型。但这只会重复(并复杂化)您上面的内容。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-09-18
        • 2014-06-21
        • 2011-10-27
        • 2013-06-25
        • 1970-01-01
        • 2021-06-07
        • 1970-01-01
        相关资源
        最近更新 更多