亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

解決DataGridView綁定List后不能排序的問題

2019-11-17 03:49:44
字體:
來源:轉載
供稿:網友
     以前不都是用table直接綁定DataGridView的,沒有出現過不能排序的問題,初試List結果發現不管怎么樣都不能實現排序的功能,有朋友說

DataGridView每一列都有個Sortable,默認Automatic,改成NotSortable了,結果怎樣,還是不行啦。

     還有朋友說, 你可以拖一個bindingsource控件. bindingsource.datasource=泛型集合 datagridview.datasource=bindingsource;

我發現也是不行,那要怎么辦呢?查一下資料才知道

    用泛型會失去DateTable的特性,要實現System.Collections.Generic.IComparer<T> 才能實現排序

沒有辦法只能實現 一把了

  看一下下面的代碼吧, 基本 是這樣的

代碼
using System;
using System.ComponentModel;
using System.Collections.Generic;
using System.Reflection;

namespace BaseFunction
{
    class ObjectPRopertyCompare<T> : System.Collections.Generic.IComparer<T>
    {
        private PropertyDescriptor property;
        private ListSortDirection direction;

        public ObjectPropertyCompare(PropertyDescriptor property, ListSortDirection direction)
        {
            this.property = property;
            this.direction = direction;
        }

        #region IComparer<T>

        /// <summary>
        /// 比較方法
        /// </summary>
        /// <param name="x">相對屬性x</param>
        /// <param name="y">相對屬性y</param>
        /// <returns></returns>
        public int Compare(T x, T y)
        {
            object xValue = x.GetType().GetProperty(property.Name).GetValue(x, null);
            object yValue = y.GetType().GetProperty(property.Name).GetValue(y, null);

            int returnValue;

            if (xValue is IComparable)
            {
                returnValue = ((IComparable)xValue).CompareTo(yValue);
            }
            else if (xValue.Equals(yValue))
            {
                returnValue = 0;
            }
            else
            {
                returnValue = xValue.ToString().CompareTo(yValue.ToString());
            }

            if (direction == ListSortDirection.Ascending)
            {
                return returnValue;
            }
            else
            {
                return returnValue * -1;
            }
        }

        public bool Equals(T xWord, T yWord)
        {
            return xWord.Equals(yWord);
        }

        public int GetHashCode(T obj)
        {
            return obj.GetHashCode();
        }

        #endregion
    }
}




在實現了這個接口之后還不能急,我們還要來寫一個SortableBindingList <T> :BindingList <T> 的類用來綁定數據

基本實現



代碼
using System;
using System.ComponentModel;
using System.Collections.Generic;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
using System.Text;

namespace BaseFunction
{
    public class BindingCollection<T> : BindingList<T>
    {
        private bool isSorted;
        private PropertyDescriptor sortProperty;
        private ListSortDirection sortDirection;

        protected override bool IsSortedCore
        {
            get { return isSorted; }
        }

        protected override bool SupportsSortingCore
        {
            get { return true; }
        }

        protected override ListSortDirection SortDirectionCore
        {
            get { return sortDirection; }
        }

        protected override PropertyDescriptor SortPropertyCore
        {
            get { return sortProperty; }
        }

        protected override bool SupportsSearchingCore
        {
            get { return true; }
        }

        protected override void ApplySortCore(PropertyDescriptor property, ListSortDirection direction)
        {
            List<T> items = this.Items as List<T>;

            if (items != null)
            {
                ObjectPropertyCompare<T> pc = new ObjectPropertyCompare<T>(property, direction);
                items.Sort(pc);
                isSorted = true;
            }
            else
            {
                isSorted = false;
            }

            sortProperty = property;
            sortDirection = direction;

            this.OnListChanged(new ListChangedEventArgs(ListChangedType.Reset, -1));
        }

        protected override void RemoveSortCore()
        {
            isSorted = false;
            this.OnListChanged(new ListChangedEventArgs(ListChangedType.Reset, -1));
        }
        //排序
        public void Sort(PropertyDescriptor property, ListSortDirection direction)
        {
            this.ApplySortCore(property, direction);
        }
    }
}



現 在應該流到怎么使用了,其實很簡單

直接

BindingCollection<object > objList = new BindingCollection<object>();
objList =你的結果集;
this.dataGridView1.DataSource = objList;


但是現在是問題是我的之前用的是List,不想改,而且調用的是Dll,人家返回的就是一個List,我沒有辦法改成BindingCollection<object >啊。

想了半天還是想出來了,只是不知道 在性能和別的方面怎么樣,所以把代碼發上來大家討論一下

我是這樣實現 的

代碼
//可以實現排序的類
            BindingCollection<historyorderInfo> objList = new BindingCollection<historyorderInfo>();
            //加載數據
            foreach (historyorderInfo item in tmpList)
            {
                objList.Add(item);
            }
            dgvhistory.DataSource = objList;




這里的tmpList就是我之前使用的系統原本的List,我是使用了 foreach 把原來的數據導入到BindingCollection中的。

這樣的確定是可以實現 我想要的效果的。不知道這樣做有什么不到之處。希望能得到高人的指點啊,呵呵


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
懂色aⅴ精品一区二区三区蜜月| yw.139尤物在线精品视频| 色婷婷成人综合| 欧美美女18p| 伊人成人开心激情综合网| 国产精品久久久久久久7电影| 久久综合久久88| 国产精品一区二区久久国产| 久久免费国产视频| 精品视频偷偷看在线观看| 亚洲黄色有码视频| 亚洲а∨天堂久久精品喷水| 性欧美视频videos6一9| 久久精品青青大伊人av| 日韩精品极品在线观看播放免费视频| 欧美xxxx18性欧美| 欧美日韩国产精品一区| 91成人天堂久久成人| 81精品国产乱码久久久久久| 国产精品揄拍一区二区| 亚洲在线www| 美日韩精品免费视频| 91精品国产乱码久久久久久蜜臀| 国内精品久久久久久久久| 国产日韩av在线| 国产亚洲综合久久| 国产日韩精品综合网站| 欧美丝袜第一区| 欧美日韩国产精品专区| 影音先锋欧美在线资源| 国产精品成人一区二区| 欧美性极品xxxx做受| 久久99久久99精品中文字幕| 国产精品高清免费在线观看| 成人在线视频网| 国产成人精品免高潮在线观看| 美女视频黄免费的亚洲男人天堂| 欧美日韩视频免费播放| 欧美黑人狂野猛交老妇| 亚洲精品在线看| 欧美黑人巨大精品一区二区| 这里精品视频免费| 日本精品va在线观看| 北条麻妃一区二区三区中文字幕| 美女999久久久精品视频| 26uuu亚洲伊人春色| 粉嫩av一区二区三区免费野| 亚洲精品在线观看www| 日产日韩在线亚洲欧美| 成人福利网站在线观看11| 亚洲已满18点击进入在线看片| 欧美成人精品在线视频| 国产精品27p| 亚洲午夜激情免费视频| 国产成人一区二区三区小说| 91精品在线一区| 欧美电影院免费观看| 国产日韩欧美电影在线观看| 91国偷自产一区二区三区的观看方式| 欧美日韩国产色视频| 色琪琪综合男人的天堂aⅴ视频| 日韩最新免费不卡| 日韩电视剧免费观看网站| 成人免费福利视频| 国产99久久精品一区二区 夜夜躁日日躁| 深夜福利日韩在线看| 欧美野外wwwxxx| 国产97在线视频| 日韩免费在线免费观看| 国产日韩欧美在线观看| 91欧美激情另类亚洲| 色与欲影视天天看综合网| 亚洲人成77777在线观看网| 欧美野外猛男的大粗鳮| 久久久亚洲欧洲日产国码aⅴ| 日韩精品在线观看视频| 亚洲性夜色噜噜噜7777| 成人亚洲综合色就1024| 欧美影院在线播放| 九色精品美女在线| 亚洲精品视频网上网址在线观看| 日韩最新在线视频| 欧美成人精品h版在线观看| 中文字幕日韩在线视频| 欧美精品午夜视频| 91精品视频观看| 欧洲成人在线视频| 中文字幕日韩高清| 自拍视频国产精品| 国产精品久久久久久久久免费看| 精品无人国产偷自产在线| 中文字幕亚洲专区| 亚洲一区二区三区毛片| 色无极影院亚洲| 日韩亚洲国产中文字幕| 欧美视频中文字幕在线| 欧美疯狂做受xxxx高潮| 免费不卡在线观看av| 国产日韩在线视频| 亚洲综合在线中文字幕| 亚洲人成电影网站色…| 久久精品一区中文字幕| 日韩成人在线视频观看| 国产成人在线精品| 欧美午夜影院在线视频| 这里只有精品视频| 97色伦亚洲国产| 国产中文字幕91| 日韩av影院在线观看| 国产成人高清激情视频在线观看| 成人在线小视频| 中国人与牲禽动交精品| 国产99久久精品一区二区 夜夜躁日日躁| 日韩成人在线播放| 久久99精品久久久久久噜噜| 日本一本a高清免费不卡| 日韩三级影视基地| 日韩欧美在线播放| 久久久欧美一区二区| 深夜成人在线观看| 欧美精品videosex牲欧美| 国产主播精品在线| 久久男人av资源网站| 91日本视频在线| 最新亚洲国产精品| 日韩视频免费中文字幕| 欧美极品少妇xxxxⅹ免费视频| 国内精品久久久久久久| 国产成人福利夜色影视| 69精品小视频| 久久久精品国产| 久久免费视频在线| 国产精品黄页免费高清在线观看| 国产一区二区久久精品| 成人免费视频a| 国产精品91免费在线| 国产精品日日做人人爱| 欧美日韩午夜视频在线观看| 性欧美xxxx| 国内免费久久久久久久久久久| 国产欧美最新羞羞视频在线观看| 精品久久久视频| 成人做爽爽免费视频| 国产丝袜一区二区| 亚洲综合日韩中文字幕v在线| 欧美亚洲国产视频| 日韩精品中文字幕在线播放| 欧美性受xxxx白人性爽| 成人国产精品日本在线| 午夜精品久久久久久久白皮肤| 国产成人拍精品视频午夜网站| 国产91露脸中文字幕在线| 日韩中文在线不卡| 日韩精品久久久久久福利| 亚洲国模精品一区| 亚洲乱码av中文一区二区| 国产狼人综合免费视频| 欲色天天网综合久久| 日韩精品亚洲精品| 日日摸夜夜添一区| 97在线视频免费观看| 欧美一级黑人aaaaaaa做受| 日韩免费在线播放| 26uuu亚洲国产精品|