У меня есть пользовательский элемент управления, в котором сетка получает данные с использованием ObjectDataSource. Все столбцы в сетке сортируются. Если пользователь нажимает на определенное имя столбца, список сортируется на основе этого столбца (List.Sort (sortColumn)).List.Sort() терпит неудачу, когда список имеет нулевые значения
Я столкнулся с проблемой, когда один из столбцов имеет пустое/нулевое значение в своем поле. Строка сравнения strA.CompareTo (strB) терпит неудачу, если «Ссылка на объект не установлена в экземпляр объекта», когда strA/strB имеет значение null или оба значения равны нулю.
Как всегда, я включил! String.IsNullOrEmpty() для strA и strB, чтобы исключить исключение null refernce. Тем не менее он не сортирует сетку.
Ниже приведен фрагмент кода.
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.
Просьба предложить.
Спасибо, Sriram
У меня нет для вас решение, но вам нужно только объявить один объект PropertyInfo, так как элементы того же класса. Вы можете использовать этот объект PropertyInfo для вызова .GetValue для обоих элементов. Поскольку для процессора немного более «дорого», это будет незначительным улучшением производительности. – MCattle