本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《
阿里云开发者社区用户服务协议
》和
《
阿里云开发者社区知识产权保护指引
》。如果您发现本社区中有涉嫌抄袭的内容,填写
侵权投诉表单
进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
public
ObjectPropertyCompare(PropertyDescriptor property, ListSortDirection direction) {
.property
property;
.direction
direction;
}
实现IComparer中方法
public
Compare(T x, T y) {
object
xValue
x.GetType().GetProperty(property.Name).GetValue(x,
object
yValue
y.GetType().GetProperty(property.Name).GetValue(y,
returnValue;
(xValue
IComparable) {
returnValue
((IComparable)xValue).CompareTo(yValue);
}
(xValue.Equals(yValue)) {
returnValue
{
returnValue
xValue.ToString().CompareTo(yValue.ToString());
}
(direction
ListSortDirection.Ascending) {
return
returnValue;
}
return
returnValue
;
}
}
}
然后创建自定义的类,实现IBindingList接口,为方便起见,这里直接继承BindingList类
<summary>
自定义绑定列表类
</summary>
<typeparam name="T">
列表对象类型
</typeparam>
public
class
BindingCollection
: BindingList
private
isSorted;
private
PropertyDescriptor sortProperty;
private
ListSortDirection sortDirection;
<summary>
</summary>
public
BindingCollection()
:
() {
}
<summary>
</summary>
<param name="list">
IList类型的列表对象
</param>
public
BindingCollection(IList
list)
:
(list) {
}
<summary>
自定义排序操作
</summary>
<param name="property"></param>
<param name="direction"></param>
protected
override
ApplySortCore(PropertyDescriptor property, ListSortDirection direction) {
List
items
.Items
(items
) {
ObjectPropertyCompare
ObjectPropertyCompare
(property, direction);
items.Sort(pc);
isSorted
{
isSorted
false
;
}
sortProperty
property;
sortDirection
direction;
.OnListChanged(
ListChangedEventArgs(ListChangedType.Reset,
));
}
<summary>
获取一个值,指示列表是否已排序
</summary>
protected
override
IsSortedCore {
return
isSorted;
}
}
<summary>
获取一个值,指示列表是否支持排序
</summary>
protected
override
SupportsSortingCore {
return
;
}
}
<summary>
获取一个只,指定类别排序方向
</summary>
protected
override
ListSortDirection SortDirectionCore {
return
sortDirection;
}
}
<summary>
获取排序属性说明符
</summary>
protected
override
PropertyDescriptor SortPropertyCore {
return
sortProperty;
}
}
<summary>
移除默认实现的排序
</summary>
protected
override
RemoveSortCore() {
isSorted
false
.OnListChanged(
ListChangedEventArgs(ListChangedType.Reset,
));
}
创建BindingCollection后即可直接应用:
原来的方式是:
I
List<
object
> list =
new
List<
object
>();
dataGridView.DataSource = list;
现在只需更改最后一句为:
dataGridView.DataSource =
new
BindingCollection<
object
>(list);