现有List<Matter>=new List<Matter>
Matter中的属性有
ProviderName
MaClass
MaName
MaSize
如果要求将List中的数据按照ProviderName,MaClass,MaName,MaSize的顺序排列
代码要如何写

解决方案 »

  1.   

    simply use List.Sort ,but before use List.Sort ,you should let Matter implement IComparer interface
      

  2.   

    你List里面的资料是绑定数据库的吗?如果是,new DataView 先把DataTable里面的资料按照ProviderName,MaClass,MaName,MaSize的顺序排列就可以了,然后用DataView 绑定List,可能我的理解跟你讲得有偏差。
      

  3.   

    随便写写~仅供参考~~using System;
    using System.Collections.Generic;
    using System.Text;namespace ConsoleApplication1
    {
        public class Matter
        {
            public string ProviderName;
            public int MaClass;
            public string MaName;
            public int MaSize;
            public override string ToString()
            {
                return string.Format("ProviderName:{0},MaClass:{1},MaName:{2},MaSize:{3}", ProviderName, MaClass, MaName, MaSize);
            }
        }
        public enum MatterComparerType {
            ProviderName, MaClass, MaName, MaSize
        }
        public enum SortOder {
            Ascending,Descending
        }
        public class MatterComparer : IComparer<Matter>
        {
            public MatterComparerType Orderby;
            public SortOder Order;
            public MatterComparer(MatterComparerType orderby,SortOder order)
            {
                this.Orderby = orderby;
                this.Order = order;
            }
            int CompareByProviderName(Matter x, Matter y) {
                if (Order == SortOder.Ascending) return string.Compare(y.ProviderName, x.ProviderName);
                return string.Compare(x.ProviderName, y.ProviderName);
            }
            int CompareByMaClass(Matter x, Matter y) {
                if (Order == SortOder.Ascending) return y.MaClass - x.MaClass;
                return x.MaClass - y.MaClass;
            }
            int CompareByMaName(Matter x, Matter y) {
                if (Order == SortOder.Ascending) return string.Compare(y.MaName, x.MaName);
                return string.Compare(x.MaName, y.MaName);
            }
            int CompareByMaSize(Matter x, Matter y) {
                if (Order == SortOder.Ascending) return y.MaSize - x.MaSize;
                return x.MaSize - y.MaSize;
            }
            #region IComparer<Matter> 成员        public int Compare(Matter x, Matter y)
            {
                switch (this.Orderby) {
                    case MatterComparerType.ProviderName: return CompareByProviderName(x, y);
                    case MatterComparerType.MaClass: return CompareByMaClass(x, y);
                    case MatterComparerType.MaName: return CompareByMaName(x, y);
                    case MatterComparerType.MaSize: return CompareByMaSize(x, y);
                }
                return 0;
            }        #endregion
        }
        class Program
        {
            static void Main(string[] args)
            {
                List<Matter> list = new List<Matter>();
                Matter m = new Matter();
                m.ProviderName = "MS1";
                m.MaClass = 111;
                m.MaName = "CK5";
                m.MaSize = 123;
                list.Add(m);
                m = new Matter();
                m.ProviderName = "MS2";
                m.MaClass = 13;
                m.MaName = "CK4";
                m.MaSize = 12213;
                list.Add(m);
                m = new Matter();
                m.ProviderName = "MS3";
                m.MaClass = 12;
                m.MaName = "CK3";
                m.MaSize = 1233;
                list.Add(m);
                m = new Matter();
                m.ProviderName = "MS3";
                m.MaClass = 1;
                m.MaName = "CK2";
                m.MaSize = 1123;
                list.Add(m);
                m = new Matter();
                m.ProviderName = "MS5";
                m.MaClass = 23;
                m.MaName = "CK1";
                m.MaSize = 123;
                list.Add(m);
                MatterComparer mc1 = new MatterComparer(MatterComparerType.MaSize,SortOder.Descending);
                MatterComparer mc2 = new MatterComparer(MatterComparerType.MaName, SortOder.Descending);
                MatterComparer mc3 = new MatterComparer(MatterComparerType.MaClass, SortOder.Descending);
                MatterComparer mc4 = new MatterComparer(MatterComparerType.ProviderName, SortOder.Descending);
                list.Sort(mc1);
                list.Sort(mc2);
                list.Sort(mc3);
                list.Sort(mc4);
                foreach (Matter ma in list)
                {
                    Console.WriteLine(ma);
                }
                Console.Read();
            }
        }
    }
      

  4.   

    我是数据库表->实体类->List->界面grid控件, 控件不能组合排序,实体类比表有多个扩展字段,实体类的属性特别多。排序字段和顺序是经常变化的,速度也要可以忍受(按点击grid的列头顺序进行组合排序)。要实现组合排序,有没有方案?
    如果改为数据源直接绑表,代价太大了,又不是oo,维护也不方便。