3

我有一个用户控件,其中网格使用 ObjectDataSource 获取数据。网格中的所有列都是可排序的。如果用户单击特定列名,则列表将根据该列进行排序 (List.Sort(sortColumn))。

当其中一列在其字段中具有空白/空值时,我面临一个问题。当 strA/strB 为空或两者都为空时,比较行 strA.CompareTo(strB) 失败并显示“对象引用未设置为对象的实例”。

但是,我为 strA 和 strB 包含了 !string.IsNullOrEmpty() 以避免空引用异常。它仍然没有对网格进行排序。

代码片段如下所示。

int IComparer<MyWorklistItem>.Compare(MyWorkItem x, MyWorkItem y)
{
        int sortValue = 1;
        if (this.strSortField.Length == 0)
        {
            return 0;
        }
        MyWorkItem item1 = this.blnSortDesc ? y : x;
        MyWorkItem item2 = this.blnSortDesc ? x : y;

        PropertyInfo property1 = item1.GetType().GetProperty(this.strSortField);
        PropertyInfo property2 = item2.GetType().GetProperty(this.strSortField);

        string strA = (string)property1.GetValue(item1, null);
        string strB = (string)property2.GetValue(item2, null);

        if (!string.IsNullOrEmpty(strA) && !string.IsNullOrEmpty(strB))
        {               
            sortValue = strA.CompareTo(strB);
        }           
        return sortValue;
    }

当其中一个值或两者都为空时,如何排序。

注意:我使用的是 VS 2005,因此无法使用 LINQ。

请建议。

谢谢,斯里拉姆

4

2 回答 2

3

您可以使用静态string.Compare方法而不是实例方法来避免 null 问题,因为您总是在比较字符串属性。

http://msdn.microsoft.com/en-us/library/system.string.compare.aspx

于 2012-04-23T14:40:24.913 回答
0

GetType在进行空值检查之前调用变量。

如果您在其他任何事情之前进行空检查,则应该处理所有事情。

于 2012-04-23T14:38:56.473 回答