日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

datagridview 点击列标题排序

發布時間:2023/11/27 生活经验 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 datagridview 点击列标题排序 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

開發winform中,平時經常用到數據列表,我們大多選用datagridview,但是此控件本身沒有排序的功能。參閱網上資料。留下標記,以后備用。

datagridview的數據顯示一般是通過數據綁定來實現,

?即:this.datagridview.DataSource=this.bindingSrc;

??? ? this.bindingSrc.DataSource=this.Model;

?

這種形式就完成了,數據的顯示過程。但是要實現點擊datagridview實現排序的功能,需要實現對數據源排序的功能。具體代碼如下:

?

public class SortableBindingList<T> : BindingList<T>{private bool isSortedCore = true;private ListSortDirection sortDirectionCore = ListSortDirection.Ascending;private PropertyDescriptor sortPropertyCore = null;private string defaultSortItem;public SortableBindingList() : base() { }public SortableBindingList(IList<T> list) : base(list) { }protected override bool SupportsSortingCore{get { return true; }}protected override bool SupportsSearchingCore{get { return true; }}protected override bool IsSortedCore{get { return isSortedCore; }}protected override ListSortDirection SortDirectionCore{get { return sortDirectionCore; }}protected override PropertyDescriptor SortPropertyCore{get { return sortPropertyCore; }}protected override int FindCore(PropertyDescriptor prop, object key){for (int i = 0; i < this.Count; i++){if (Equals(prop.GetValue(this[i]), key)) return i;}return -1;}protected override void ApplySortCore(PropertyDescriptor prop, ListSortDirection direction){isSortedCore = true;sortPropertyCore = prop;sortDirectionCore = direction;Sort();}protected override void RemoveSortCore(){if (isSortedCore){isSortedCore = false;sortPropertyCore = null;sortDirectionCore = ListSortDirection.Ascending;Sort();}}public string DefaultSortItem{get { return defaultSortItem; }set{if (defaultSortItem != value){defaultSortItem = value;Sort();}}}private void Sort(){List<T> list = (this.Items as List<T>);list.Sort(CompareCore);ResetBindings();}private int CompareCore(T o1, T o2){int ret = 0;if (SortPropertyCore != null){ret = CompareValue(SortPropertyCore.GetValue(o1), SortPropertyCore.GetValue(o2), SortPropertyCore.PropertyType);}if (ret == 0 && DefaultSortItem != null){PropertyInfo property = typeof(T).GetProperty(DefaultSortItem, BindingFlags.Public | BindingFlags.GetProperty | BindingFlags.Instance | BindingFlags.IgnoreCase, null, null, new Type[0], null);if (property != null){ret = CompareValue(property.GetValue(o1, null), property.GetValue(o2, null), property.PropertyType);}}if (SortDirectionCore == ListSortDirection.Descending) ret = -ret;return ret;}private static int CompareValue(object o1, object o2, Type type){if (o1 == null) return o2 == null ? 0 : -1;else if (o2 == null) return 1;else if (type.IsPrimitive || type.IsEnum) return Convert.ToDouble(o1).CompareTo(Convert.ToDouble(o2));else if (type == typeof(DateTime)) return Convert.ToDateTime(o1).CompareTo(o2);else return String.Compare(o1.ToString().Trim(), o2.ToString().Trim());}} 

?實現此類后,就可以通過?this.bindingSrc.DataSource=new SortableBindingList<CnsDetailReport>(this.Model); 實現點擊列標題排序的目的了。

轉載于:https://www.cnblogs.com/fer-team/p/3423722.html

總結

以上是生活随笔為你收集整理的datagridview 点击列标题排序的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。