2012-02-21 33 views
0

ListView处于虚拟模式,你负责馈送ListView一个ListItem对应于索引n当它要求通过OnRetrieveItem事件。如何在虚拟模式下对ListView的底层列表进行排序时进行排序?

我根据我自己的规则排序我的名单,并告诉列表视图重绘:

listView1.Invalidate(); 

这是好得很。

除用户选择了一些项目。现在,当树重新绘制时,不同项目被选中。

什么是技术来排序SelectedIndices

但是,如果我整理我自己个人的名单

回答

1

您需要在他们的新指数,其存储选择的对象,排序,找到对象,并重新选择了。

的代码可能看起来像这样(优化它,你认为合适):

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); 
    } 
}