我有一个WinForms DataGridView绑定到SortableBindlingList(非常类似于this example)。
默认情况下,添加项目时,它们将出现在DataGridView的底部。在示例中,我遇到了人们希望新项目以正确的排序位置显示的情况,在添加项目后,他们将其称为DataGridView.Sort。
如果您有大量的数据集合并且经常添加项目,这对我来说似乎相当昂贵。在SortableBindingList中添加以下方法似乎是个好主意吗?关于如何使其更快或更强大的任何想法?
public int InsertSorted(T newItem)
{
PropertyDescriptor prop = sortPropertyValue;
ListSortDirection direction = sortDirectionValue;
Type interfaceType = prop.PropertyType.GetInterface("IComparable");
if (interfaceType == null && prop.PropertyType.IsValueType)
{
Type underlyingType = Nullable.GetUnderlyingType(prop.PropertyType);
if (underlyingType != null)
{
interfaceType = underlyingType.GetInterface("IComparable");
}
}
if (interfaceType != null)
{
IComparable comparer = (IComparable)prop.GetValue(newItem);
IList<T> query = base.Items;
int idx = 0;
if (direction == ListSortDirection.Ascending)
{
for (idx = 0; idx < query.Count - 1; idx++)
{
if (comparer.CompareTo(prop.GetValue(query[idx])) < 0)
{
break;
}
}
}
else
{
for (idx = 0; idx < query.Count - 1; idx++)
{
if (comparer.CompareTo(prop.GetValue(query[idx])) > 0)
{
break;
}
}
}
this.InsertItem(idx, newItem);
return idx;
}
else
{
throw new NotSupportedException("Cannot sort by " + prop.Name +
". This" + prop.PropertyType.ToString() +
" does not implement IComparable");
}
}