Winforms 当我在虚拟模式下对基础列表进行排序时,如何对ListView的选择进行排序?
当Winforms 当我在虚拟模式下对基础列表进行排序时,如何对ListView的选择进行排序?,winforms,listview,virtualmode,Winforms,Listview,Virtualmode,当ListView处于虚拟模式时,您负责在通过OnRetrieveItem事件发出请求时,向ListViewaListItem提供索引n对应的 我根据自己的规则对列表进行排序,并告诉listview重新绘制: listView1.Invalidate(); 那很好,很漂亮 除非用户选择了某些项目。现在,当树重新绘制时,会选择不同的项目 排序所选骰子的方法是什么 但是如果我对自己的个人列表进行排序您需要存储所选对象,进行排序,根据新索引查找对象并重新选择它们 代码可能如下所示(根据需要进行优化)
ListView
处于虚拟模式时,您负责在通过OnRetrieveItem
事件发出请求时,向ListView
aListItem
提供索引n
对应的
我根据自己的规则对列表进行排序,并告诉listview重新绘制:
listView1.Invalidate();
那很好,很漂亮
除非用户选择了某些项目。现在,当树重新绘制时,会选择不同的项目
排序所选骰子的方法是什么
但是如果我对自己的个人列表进行排序您需要存储所选对象,进行排序,根据新索引查找对象并重新选择它们
代码可能如下所示(根据需要进行优化):
void listView1\u ColumnClick(对象发送者,ColumnClickEventArgs args args)
{
//存储选定的对象
List selectedObjects=new List();
foreach(listView1.SelectedIndices中的int索引)
{
添加(m_MyDataObjectsColl[index]);
}
//清除所有选定的索引
listView1.SelectedDices.Clear();
//对列表排序
SortListView(listView1,args);
//根据对象的新索引重新选择对象
foreach(选定对象中的MyDataObject selectedObject)
{
int index=m_MyDataObjectsColl.FindIndex(
委托(MyDataObject对象){return obj==selectedObject;}
);
listView1.SelectedDices.Add(索引);
}
}
void listView1_ColumnClick( object sender, ColumnClickEventArgs args )
{
// Store the selected objects
List<MyDataObject> selectedObjects = new List<MyDataObject>();
foreach ( int index in listView1.SelectedIndices )
{
selectedObjects.Add( m_MyDataObjectsColl[index] );
}
// Clear all selected indices
listView1.SelectedIndices.Clear();
// Sort the list
SortListView(listView1, args);
// Reselect the objects according to their new indices
foreach ( MyDataObject selectedObject in selectedObjects )
{
int index = m_MyDataObjectsColl.FindIndex(
delegate( MyDataObject obj ) { return obj == selectedObject; }
);
listView1.SelectedIndices.Add( index );
}
}