如何在表单加载时对列表视图进行排序?

本文关键字:视图 排序 列表 表单 加载 | 更新日期: 2023-09-27 18:13:43

我有一个listview (lvMap)与3列(Map, From, To)我正试图写一个方法,即调用我的表单加载。这个方法应该看看列表视图项目,并排序他们只有2列"Map"answers"From"按升序,我不希望它排序"to"列。我已经写了下面的代码,但它排序每一个单独的列,是否有一种方法,以离开一列的排序过程。谢谢。

private void sortListViewOrder()
{
    lvMappings.Sorting = SortOrder.Ascending;
    lvMappings.Sort();
}

如何在表单加载时对列表视图进行排序?

我建议你参考下面的MSDN文章,希望它能回答你的问题:

http://support.microsoft.com/kb/319401

基本上你需要创建一个ListViewColumnSorter实例,并将其添加到你的ListView控件。

从这里开始,文章将有足够的信息:)

您必须使用ListViewColumnSorter。下面的KB Link提供了这样做的示例代码。

http://support.microsoft.com/kb/319401

您可以使用

指定要排序的列。
 Create an instance of a ListView column sorter and assign it 
// to the ListView control.
lvwColumnSorter = new ListViewColumnSorter();
this.listView1.ListViewItemSorter = lvwColumnSorter;
lvwColumnSorter.SortColumn = Column;

我需要在ListView控件中使用这个特性或函数。我第一次看到使用扩展类的建议是在这里。我试过了,效果不错,但直到现在我才知道如何轻松地做到这一点。参考这个参考问题:如何防止在ListView闪烁时更新单个ListViewItem's文本?

步骤1:在项目中创建一个(单独的)ControlExtensions类,并粘贴以下代码:
using System.Reflection;
using System.Windows.Forms;
namespace [YourNameSpace]
{
    public static class ControlExtensions
    {
        public static void DoubleBuffering(this Control control, bool enable)
        {
            var method = typeof(Control).GetMethod("SetStyle", BindingFlags.Instance | BindingFlags.NonPublic);
            method.Invoke(control, new object[] { ControlStyles.OptimizedDoubleBuffer, enable });
        }
    }
}

步骤2:在具有ListView的WinForms中定义以下内容:

        private ListViewColumnSorter lvwColumnSorter = null;

InitializeComponent后();Section中,定义如下内容:

        lvwColumnSorter = new ListViewColumnSorter();
        this.lvwRunningProcesses.ListViewItemSorter = lvwColumnSorter;
        lvwColumnSorter._SortModifier = ListViewColumnSorter.SortModifiers.SortByText;

步骤3:在Form Load事件中,在填充列表视图之后添加这些行:

        // Sort in ascending order Column 0
        lvwColumnSorter.SortColumn = 0;
        lvwColumnSorter.Order = SortOrder.Ascending;
        this.lvwRunningProcesses.Sort();

就是这样!