c# – DataGridView使用SortableBindingList
发布时间:2020-12-15 04:12:13 所属栏目:百科 来源:网络整理
导读:我有一个函数返回一个IList T并且是DataGridView的DataSource.我了解到DataGridView不会对IList进行排序.我读了 This stackoverflow QA,我试图实现SortableBindingList.我必须做错事,因为我的DataGridView是空的.我也试图从一个TextBox的SortableBindingSour
我有一个函数返回一个IList< T>并且是DataGridView的DataSource.我了解到DataGridView不会对IList进行排序.我读了
This stackoverflow Q&A,我试图实现SortableBindingList.我必须做错事,因为我的DataGridView是空的.我也试图从一个TextBox的SortableBindingSource访问一个元素,也没有.
using Microsoft.SqlServer.Management.Controls; public partial class Form1 : Form { IBusinessLayer businessLayer; IList<Category> categories; SortableBindingList<Category> catSortable; public Form1() { InitializeComponent(); } private void Form1_Load(object sender,EventArgs e) { businessLayer = new BusinessLayer(); categories = businessLayer.GetAllCategories(); catSortable = new SortableBindingList<Category>(categories); categoryBindingSource.DataSource = catSortable; categoryDataGridView.DataSource = categoryBindingSource; textBox1.Text = catSortable[0].CategoryName; } } 我检查了Microsoft.SqlServer.Management.Controls,这样看起来不错吗? namespace Microsoft.SqlServer.Management.Controls { public class SortableBindingList<T> : BindingList<T> { public SortableBindingList(); public SortableBindingList(IList<T> list); protected override bool IsSortedCore { get; } protected override ListSortDirection SortDirectionCore { get; } protected override PropertyDescriptor SortPropertyCore { get; } protected override bool SupportsSortingCore { get; } protected override void ApplySortCore(PropertyDescriptor prop,ListSortDirection direction); protected override void RemoveSortCore(); } } 我非常感谢帮助,帮助我学习.感谢大家! 解决方法
尝试这个SortableBindingList:
public class SortableBindingList<T> : BindingList<T> { private bool isSortedValue; ListSortDirection sortDirectionValue; PropertyDescriptor sortPropertyValue; public SortableBindingList() { } public SortableBindingList(IList<T> list) { foreach (object o in list) { this.Add((T)o); } } protected override void ApplySortCore(PropertyDescriptor prop,ListSortDirection direction) { 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) { sortPropertyValue = prop; sortDirectionValue = direction; IEnumerable<T> query = base.Items; if (direction == ListSortDirection.Ascending) { query = query.OrderBy(i => prop.GetValue(i)); } else { query = query.OrderByDescending(i => prop.GetValue(i)); } int newIndex = 0; foreach (object item in query) { this.Items[newIndex] = (T)item; newIndex++; } isSortedValue = true; this.OnListChanged(new ListChangedEventArgs(ListChangedType.Reset,-1)); } else { throw new NotSupportedException("Cannot sort by " + prop.Name + ". This" + prop.PropertyType.ToString() + " does not implement IComparable"); } } protected override PropertyDescriptor SortPropertyCore { get { return sortPropertyValue; } } protected override ListSortDirection SortDirectionCore { get { return sortDirectionValue; } } protected override bool SupportsSortingCore { get { return true; } } protected override bool IsSortedCore { get { return isSortedValue; } } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |