0

我有一个包含 3 列(Map、From、To)的列表视图(lvMap)我正在尝试编写一个在我的表单加载后立即调用的方法。此方法应查看列表视图项目,并仅按 2 列“Map”和“From”按升序对它们进行排序,我不希望它对“To”列进行排序。我已经编写了下面的代码,但它对每一列进行排序,有没有办法将一列排除在排序过程之外。谢谢。

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

3 回答 3

0

我建议您查阅以下 MSDN 文章,希望它能回答您的问题:

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

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

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

于 2013-05-14T12:49:41.903 回答
0

您必须使用 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;
于 2013-05-14T12:50:27.813 回答
0

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

第 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;

在初始化组件()之后;部分,定义以下内容:

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

第 3 步:在表单加载事件中,在填充列表视图后添加以下行:

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

而已!

于 2016-12-22T15:51:14.963 回答