调用 Sort()-Function 后 ListView 无法正常工作

Posted

技术标签:

【中文标题】调用 Sort()-Function 后 ListView 无法正常工作【英文标题】:ListView not working properly after calling Sort()-Function 【发布时间】:2022-01-22 23:43:00 【问题描述】:

我目前正在开发这个旧的、生锈的 .NET 框架平台。

在我的表单中,我有一个 ListView,我正在向其中添加一些带有数据标记的项目。 当一个被选中时,新的带有数据标签的项目被放置在所选项目的下一级。

我按下一个列标题,这会强制列表视图按字母顺序对项目进行排序。 我再次在其中添加了一个带有数据标签的项目。 ListView 将它放在索引 0 处,尽管我选择了一个项目? 请看视频:https://drive.google.com/file/d/1pdAjHzylVCZjDzR3QltF_1v371hAb_3r/view?usp=sharing

到底为什么会这样? 关于为什么会出现此问题的任何建议?

感谢您的关注!

这是代码: --添加数据标记项时--

        private void btnAddSecuring_Click(object sender, EventArgs e)
         
            
            int insertIndex = viewSecurings.SelectedItems.Count >= 1 ? viewSecurings.SelectedIndices[0] + 1 : 0;
            Securing sec = new Securing(viewSecurings);
            ListViewItem item = viewSecurings.Items.Insert(insertIndex, new ListViewItem()  Tag = sec  );
            sec.ShowInListViewItem(item);
            item.Selected = true;
            item.BeginEdit();


        

    // in Securing.cs:
    public void ShowInListViewItem(ListViewItem item)
    
        while (item.SubItems.Count < 3)
        
            item.SubItems.Add("");
        

        item.SubItems[0].Text = name;
        item.SubItems[1].Text = lastExecuteToStr();
        item.SubItems[2].Text = getTotalSrcBytes().ToString();
    

--点击列标题时--

        private void viewSecurings_ColumnClick(object sender, ColumnClickEventArgs e)
        
            currentColumnIndex = e.Column;
            SortSecurings();
        

        void SortSecurings()
        
            
            viewSecurings.ListViewItemSorter = new ListViewItemComparer(currentColumnIndex);
            viewSecurings.Sort();
        

当我不更改新添加项目的文本时,程序得到解决: 这意味着删除“item.SubItems[0].Text = name”可以解决问题。 但为什么呢?

-- ListViewItemComparer的代码-- http://csharp-slackers.blogspot.com/2008/09/how-to-sort-list-view-by-any-column.html

【问题讨论】:

伙计们,我可以自己解决一两分钟,然后我会发布我的解决方案! 【参考方案1】:

诀窍是在使用后将 ListViewItemSorter-property 设置为 null: 在构造函数中:

private ListViewColumnSorter lvwColumnSorter;
public ControlSecurings()
    
        InitializeComponent();
        lvwColumnSorter = new ListViewColumnSorter();
        SortSecurings();
    

新的“SortSecurings()”方法:

void SortSecurings()
    
        viewSecurings.ListViewItemSorter = lvwColumnSorter; // <-- important!
        this.viewSecurings.Sort();
        viewSecurings.ListViewItemSorter = null; // <-- important!
    

我现在正在使用另一个分拣机,但这不应该改变原则。 祝你有美好的一天!

【讨论】:

以上是关于调用 Sort()-Function 后 ListView 无法正常工作的主要内容,如果未能解决你的问题,请参考以下文章

flask中自定义过滤器

数组常用方法

js数组操作

R语言使用sort.list函数对向量数据进行排序(默认升序排序)返回排序后的对应索引值

147. Insertion Sort List

List<Object>排序