2012-04-23 3 views
3

У меня есть пользовательский элемент управления, в котором сетка получает данные с использованием 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

+1

У меня нет для вас решение, но вам нужно только объявить один объект PropertyInfo, так как элементы того же класса. Вы можете использовать этот объект PropertyInfo для вызова .GetValue для обоих элементов. Поскольку для процессора немного более «дорого», это будет незначительным улучшением производительности. – MCattle

ответ

0

Вы звоните GetType по переменным, прежде чем делать проверку нулевой.

Если вы делаете нулевой чек перед тем, что должно заботиться обо всем.

+0

Несмотря на то, что он не может обрабатывать нули, OP также спрашивает, как обращаться с ними при сортировке. Если вы ничего не вернете, ваш «отсортированный список» будет случайным образом перемещен с нулевыми значениями. –

+0

Я смотрю на это как «как я могу сделать это не сбой», а не «что должно идти первым». В любом случае, вы уже рассмотрели его, так почему же избыточно предоставляете ту же информацию. – Servy

+0

Я считаю, что OP больше беспокоился о том, что поля в объекте равны нулю, но я согласен, что сами объекты также должны быть проверены на нуль. – MCattle

3

Вы можете использовать статический метод string.Compare, а не метод экземпляра, чтобы избежать проблем с нулем, учитывая, что вы всегда сравниваете свойства строки.

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

+0

Спасибо за ответ .. –

Смежные вопросы