调用 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 无法正常工作的主要内容,如果未能解决你的问题,请参考以下文章