做一个组件,它继承于ListView控件,实现如下的特殊功能,当点击列表字段时重新按此字段进行数据源排序,怎么做?大家讲一下思路?

解决方案 »

  1.   

      private System.Windows.Forms.ContextMenuStrip Save;
      private System.Windows.Forms.ToolStripMenuItem saveas; 
    public DEGrid()
            {
                InitializeComponent();
                
                Save = new ContextMenuStrip();
                saveas = new ToolStripMenuItem("Save as");
                saveas.Font = Consts.MyFont;
                saveas.Click += new EventHandler(saveas_Click);
                Save.Items.Add(saveas);
                this.ContextMenuStrip = Save;
            }
       void saveas_Click(object sender, EventArgs e)
            {
                OperationGrid opg = new OperationGrid(this);
                opg.SaveAsExcel();
            }这是我封装的鼠标右键操作.你可以封装成鼠标左键的,在saveas_Click方法里写排序操作
      

  2.   

    //以下代码示例完整来自于MSDN本地帮助的一个关于ListView的排序示例,
    一起学习;不过这不Winform是 XAML程序
    (ListView,个人感觉比较复杂,我都很少用它)using System;
    using System.Windows;
    using System.Windows.Controls;
    using System.Windows.Media;
    using System.Collections;
    using System.Windows.Controls.Primitives;
    using System.ComponentModel;
    using System.Windows.Data;namespace ListViewSort
    {
        /// <summary>
        /// Interaction logic for Window1.xaml
        /// </summary>
        //<Snippet6>
        public partial class Window1 : Window
        {
            public Window1()
            {
                InitializeComponent();
            }        GridViewColumnHeader _lastHeaderClicked = null;
            ListSortDirection _lastDirection = ListSortDirection.Ascending;        void GridViewColumnHeaderClickedHandler(object sender,
                                                    RoutedEventArgs e)
            {
                GridViewColumnHeader headerClicked =
                      e.OriginalSource as GridViewColumnHeader;
                ListSortDirection direction;            if (headerClicked != null)
                {
                    if (headerClicked.Role != GridViewColumnHeaderRole.Padding)
                    {
                        if (headerClicked != _lastHeaderClicked)
                        {
                            direction = ListSortDirection.Ascending;
                        }
                        else
                        {
                            if (_lastDirection == ListSortDirection.Ascending)
                            {
                                direction = ListSortDirection.Descending;
                            }
                            else
                            {
                                direction = ListSortDirection.Ascending;
                            }
                        }                    string header = headerClicked.Column.Header as string;
                        Sort(header, direction);                    if (direction == ListSortDirection.Ascending)
                        {
                            headerClicked.Column.HeaderTemplate =
                              Resources["HeaderTemplateArrowUp"] as DataTemplate;
                        }
                        else
                        {
                            headerClicked.Column.HeaderTemplate =
                              Resources["HeaderTemplateArrowDown"] as DataTemplate;
                        }                    // Remove arrow from previously sorted header
                        if (_lastHeaderClicked != null && _lastHeaderClicked != headerClicked)
                        {
                            _lastHeaderClicked.Column.HeaderTemplate = null;
                        }
                        _lastHeaderClicked = headerClicked;
                        _lastDirection = direction;
                    }
                }
            }
            //</Snippet6>
            //<Snippet5>
            private void Sort(string sortBy, ListSortDirection direction)
            {
                ICollectionView dataView =
                  CollectionViewSource.GetDefaultView(lv.ItemsSource);            dataView.SortDescriptions.Clear();
                SortDescription sd = new SortDescription(sortBy, direction);
                dataView.SortDescriptions.Add(sd);
                dataView.Refresh();
            }
            //</Snippet5>
        }
    }