【问题标题】:C# ListView sortingC# ListView 排序
【发布时间】:2011-09-05 15:37:19
【问题描述】:

我有 2 个 ListView,我将选定的项目从一个添加到另一个。第一个 ListView,我们称之为 availableJobs 和第二个 ListView selectedJobs。人员可以从第一个 ListView 中选择工作/工作并将其移动到第二个。现在我想要的是排序应该与第一个 ListView 中的排序保持一致。在第一个availableJobs 中,作业按作业 ID 排序,我只想在 selectedJobs TreeView 中保留该排序。

例如:

1)我选择 ID 为 3 的 Job 并将其移动到 selectedJobs TreeView
2)我选择 ID 为 1 的 Job 并将其移动到 selectedJobs

现在发生的事情是selectedJobs 中的顺序将是:

工作 3
工作1

我需要的是,当我添加 ID 为 1 的作业时,它会从 ID 为 3 的作业进入。

我尝试使用自定义比较器:

    public class IntegerComparer : IComparer
    {
        private int _colIndex;
        public IntegerComparer(int colIndex)
        {
            _colIndex = colIndex;
        }
        public int Compare(object x, object y)
        {
            int nx = int.Parse((x as ListViewItem).SubItems[_colIndex].Text);
            int ny = int.Parse((y as ListViewItem).SubItems[_colIndex].Text);
            return nx.CompareTo(ny);
        }
    }

但问题在于它将 ID 为 10、11 等的 Job 置于 2、3 等之前。

【问题讨论】:

  • 您找到解决方案了吗?
  • 也许不是使用Add(),而是获取所选列表中下一个更高作业的索引,并在索引 - 1 处执行InserAt()
  • 你是如何使用那个比较器的?列表视图上有一些排序的列吗?

标签: c# winforms listview


【解决方案1】:

可以使用 ListView 的排序功能:

http://msdn.microsoft.com/en-us/library/ms996467.aspx

或者直接将作业从 ListView1 添加到 ListView2,您可以填充按 Id 排序的 LineItem(或定制对象)列表,您可以将该列表用作 ListView2 的数据源

【讨论】:

    【解决方案2】:

    您可以使用自定义排序。为此,您必须实现 IComparer 类并设置 ListViewItemSorter 属性。以下链接有一个示例实现:

    http://csharpexamples.com/c-sort-listview-items-columns/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-17
      • 2014-10-10
      • 2015-02-27
      • 1970-01-01
      • 1970-01-01
      • 2012-01-07
      相关资源
      最近更新 更多