グリッドが ObjectDataSource を使用してデータを取得するユーザー コントロールがあります。グリッド内のすべての列は並べ替え可能です。ユーザーが特定の列名をクリックすると、その列に基づいてリストがソートされます (List.Sort(sortColumn))。
列の 1 つのフィールドに空白/null 値がある場合、問題に直面しています。strA/strB が null または両方が null の場合、比較行 strA.CompareTo(strB) は「オブジェクト参照がオブジェクトのインスタンスに設定されていません」で失敗します。
ただし、null 参照例外を回避するために、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;
}
値の 1 つまたは両方が null の場合、どのように並べ替えますか。
注: 私は VS 2005 を使用しているため、LINQ の可能性はありません。
提案してください。
ありがとう、スリラム