程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> .NET實例教程 >> 可點擊列標題可進行排序的ListView控件

可點擊列標題可進行排序的ListView控件

編輯:.NET實例教程
源代碼下載:http://www.91files.com/?2AB4T9OBZAZJY5G1BQNL
public class DataListView : ListVIEw
    ...{
        private DataListVIEwSorter columnSort;
        public DataListVIEw()
            : base()
        ...{
            DoubleBuffered = true;
            FullRowSelect = true;
            GridLines = true;
            HideSelection = false;
            MultiSelect = false;
            columnSort = new DataListVIEwSorter();
            ColumnClick += new ColumnClickEventHandler(DataListVIEw_ColumnClick);
            ListVIEwItemSorter = columnSort;            
        }

        /**//// <summary>
        /// Return Columns for this list. We hide the original so we can associate
        /// a specialised editor with it.
        /// </summary>
        [Editor(typeof(DataColumnCollectionEditor), typeof(UITypeEditor))]
        new public ListVIEw.ColumnHeaderCollection Columns
        ...{
            get
            ...{
                return base.Columns;
            }
        }

        private void DataListVIEw_ColumnClick(object sender, ColumnClickEventArgs e)
        ...{
            DataColumnHeader column = Columns[e.Column] as DataColumnHeader;
            if (column == null)
                return;

            foreach (ColumnHeader columnHeader in Columns)
                columnHeader.ImageKey = null;
            column.SortOrder = column.SortOrder == SortOrder.Descending ? SortOrder.Ascending : SortOrder.Descending;
           &n;columnSort.SortOrder = column.SortOrder;
            columnSort.Column = e.Column;
            Sort();
        }

        public bool EndableSorter
        ...{
            get ...{ return !(ListVIEwItemSorter == null); }
            set
            ...{
                if (value)
                ...{
                    ListVIEwItemSorter = columnSort;
                    this.HeaderStyle = ColumnHeaderStyle.Clickable;
                }
                else
                ...{
                    ListVIEwItemSorter = null;
                    HeaderStyle = ColumnHeaderStyle.Nonclickable;
                }
            }
        }

    }

    internal class DataColumnCollectionEditor : CollectionEditor
    ...{
        public DataColumnCollectionEditor(Type t)
            : base(t)
        ...{
        }

        protected override Type CreateCollectionItemType()
        ...{
 &nbs     return typeof(DataColumnHeader);
        }
    }  

public class DataListVIEwSorter : IComparer
    ...{
        private SortOrder sortOrder;
        private int column;
        private ListItemComparer numberComparer;

        internal DataListVIEwSorter()
        ...{
            numberComparer = new ListItemComparer();
        }

        public int Compare(object x, object y)
        ...{
            int compareResult;
            string first, secondly;
            ListViewItem item = x as ListVIEwItem;
            first = item == null ? string.Empty : item.SubItems[column].Text;
            item = y as ListVIEwItem;
            secondly&n item == null ? string.Empty : item.SubItems[column].Text;
            compareResult = numberComparer.Compare(first, secondly);
            return sortOrder == SortOrder.Ascending ? compareResult : -compareResult;
        }

        public SortOrder SortOrder
        ...{
            set ...{ sortOrder = value; }
            get ...{ return sortOrder; }
        }

        public int Column
        ...{
            get ...{ return&nbs
            set ...{ column = value; }
        }
    }

    public class ListItemComparer : CaseInsensitiveComparer
    ...{

        public ListItemComparer() : base(CultureInfo.InvariantCulture) ...{ }

        public new int Compare(object itemX, object itemY)
        ...{
            if (Information.IsDate(itemX) && Information.IsDate(itemY))
                return base.Compare(Convert.ToDateTime(itemX), Convert.ToDateTime(itemY));
            else if (!Information.IsNumeric(itemX) || !Information.IsNumeric(itemY))
                return base.Compare(itemX, itemY);
            return base.Compare(
                Convert.ToDouble(itemX, CultureInfo.InvariantCulture),
                Convert.ToDouble(itemY, CultureInfo.InvariantCulture));
        }
    }


public class DataColumnHeader : ColumnHeader
    ...{
        /**//// <summary>
        /// 構造
        /// </summary>
        /// <param name="text">列標題名稱</param>
        public DataColumnHeader(string text)
            : base()
        ...{
            this.Text = text;
        }

        /**//// <summary>
        /// 構造
        /// </summary>
        public DataColumnHeader() : base() ...{ }

        /**//// <summary>
        /// 
        /// </summary>
        /// <param name="text">列標題名稱</param>
        /// <param name="width">列寬</param>
        public DataColumnHeader(string text, int width)
            : this(text)
        ...{
            this.Width = width;
        }

        private SortOrder sortOrder;

        /**//// <summary>
        /// 獲取或設置列當前的排序方式
     &nbs /// </summary>
        public SortOrder SortOrder
        ...{
            get ...{ return sortOrder; }
            set
            ...{
                sortOrder = value;
                ImageKey = sortOrder.ToString();
            }
        }

        /**//// <summary>
        /// 
        /// </summary>
        /// <param name="text">列標題名稱</param>
        /// <param name="width">列寬</param>
        /// <param name="textAlign">列內容位置</param>
     &nb public DataColumnHeader(string text, int width, HorizontalAlignment textAlign)
            : this(text, width)
        ...{
            this.TextAlign = textAlign;
        }
    }
在向ListView添加項時可以先禁用排序功能再進行添加,添加後再啟用排序功能,這樣操作可以優化ListVIEw控件的性能.
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved