之前参考了很多帖子和回复,网上也进行了大量搜索,主要都是说利用listView1.Sorting = SortOrder.Ascending对第一栏进行排序,或是利用Icomparer的派生类以及columnclick事件来对选定栏进行排序.
这里想请问一下,有没有办法通过click button来对特定栏(非第一栏)进行排序.或者说有没有办法通过buttonclick事件来触发特定栏的columnclick事件,谢谢.

解决方案 »

  1.   

    参考下这个 /// <summary>
            /// LISTVIEW排序
            /// </summary>
            /// <param name="LV"></param>
            /// <param name="x"></param>
            public static void SortList(ListView p_ListView, int p_CoulumIndex)
            {
                ListViewColumnSorter _ColumnSorter = new ListViewColumnSorter();
                p_ListView.ListViewItemSorter = _ColumnSorter;            _ColumnSorter.SortColumn = p_CoulumIndex;            if (p_ListView.Columns[p_CoulumIndex].Name != "AZ")
                {
                    _ColumnSorter.Order = System.Windows.Forms.SortOrder.Ascending;
                    p_ListView.Columns[p_CoulumIndex].Name = "AZ";
                }
                else
                {
                    _ColumnSorter.Order = System.Windows.Forms.SortOrder.Descending;
                    p_ListView.Columns[p_CoulumIndex].Name = "ZA";
                }
                p_ListView.Sort();
            }
            /// <summary>
            /// LIST排序 调用在 WindowsFrom.SortList 不需要直接使用
            /// </summary>
            private class ListViewColumnSorter : IComparer
            {
                private int m_ColumnToSort;
                private System.Windows.Forms.SortOrder m_OrderOfSort;
                private CaseInsensitiveComparer m_ObjectCompare;            public ListViewColumnSorter()
                {
                    m_ColumnToSort = 0;
                    m_OrderOfSort = System.Windows.Forms.SortOrder.None;
                    m_ObjectCompare = new CaseInsensitiveComparer();
                }
                public int Compare(object p_X, object p_Y)
                {
                    int _CompareResult;
                    ListViewItem _ListviewX = (ListViewItem)p_X;
                    ListViewItem _ListviewY = (ListViewItem)p_Y;
                    _CompareResult = m_ObjectCompare.Compare(_ListviewX.SubItems[m_ColumnToSort].Text, _ListviewY.SubItems[m_ColumnToSort].Text);                if (m_OrderOfSort == System.Windows.Forms.SortOrder.Ascending)
                    {
                        return _CompareResult;
                    }
                    else if (m_OrderOfSort == System.Windows.Forms.SortOrder.Descending)
                    {
                        return (-_CompareResult);
                    }
                    else
                    {
                        return 0;
                    }
                }
                public int SortColumn
                {
                    set
                    {
                        m_ColumnToSort = value;
                    }
                    get
                    {
                        return m_ColumnToSort;
                    }
                }
                public System.Windows.Forms.SortOrder Order
                {
                    set
                    {
                        m_OrderOfSort = value;
                    }
                    get
                    {
                        return m_OrderOfSort;
                    }
                }        }              private void listView1_ColumnClick(object sender, ColumnClickEventArgs e)
            {
                SortList((ListView)sender, e.Column);
            }