我目前正在使用这个旧的、受信任的.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!
}
我现在用的是自动分拣机,但这不应该改变原理
祝你今天愉快!