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



我目前正在使用这个旧的、受信任的.NET Framework平台。

在我的表单中,我有一个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();
}

当我不更改新添加项目的文本时,程序就会得到解决:这意味着删除";项目子项[0]。文本=名称";解决了问题。但为什么呢?

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

诀窍是在使用ListViewItemSorter属性后将其设置为null:
在构造函数中:

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

新的";排序安全(("方法:

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

我现在用的是自动分拣机,但这不应该改变原理
祝你今天愉快!

最新更新