将项目插入C#Winforms列表视图

将项目插入C#Winforms列表视图,c#,winforms,listview,C#,Winforms,Listview,下面这句话让我头疼不已: listView1.Items.Insert(0, new ListViewItem("Test", listView1.Groups[0])); 我只想在列表视图中插入一个项目。listview处于启用组的详细模式。插入的项应进入索引0处的第一个组。 但实际情况是,该项始终作为组中的最后一项添加。好像Insert(…)的第一个参数没有任何影响 我有什么遗漏吗 顺便说一句:在listview上已禁用排序 您可以尝试: ListViewItem item = new L

下面这句话让我头疼不已:

listView1.Items.Insert(0, new ListViewItem("Test", listView1.Groups[0]));
我只想在列表视图中插入一个项目。listview处于启用组的详细模式。插入的项应进入索引0处的第一个组。 但实际情况是,该项始终作为组中的最后一项添加。好像Insert(…)的第一个参数没有任何影响

我有什么遗漏吗

顺便说一句:在listview上已禁用排序

您可以尝试:

ListViewItem item = new ListViewItem("Test");
this.listView1.Items.Insert(0, item);
this.listView1.Groups[0].Items.Insert(0, item);
可以找到详细的讨论

此示例向listview添加三个组,并在组的第一个位置添加项目:

for (int groupIndex = 0; groupIndex < 3; ++groupIndex) {
   this.listView1.Groups.Add("GroupKey" + groupIndex, "Test" + groupIndex);

   for (int index = 0; index < 5; ++index) {
      ListViewItem item = new ListViewItem("Test " + groupIndex + "/" + index,
                                           this.listView1.Groups[groupIndex]);
      this.listView1.Items.Insert(0, item);
      this.listView1.Groups[groupIndex].Items.Insert(0, item);
    }
 }

 for (int groupIndex = 2; groupIndex >= 0; --groupIndex) {
    for (int index = 0; index < 5; ++index) {
      ListViewItem item = new ListViewItem("Test2 " + groupIndex + "/" + index,
                                           this.listView1.Groups[groupIndex]);
      this.listView1.Items.Insert(0, item);
      this.listView1.Groups[groupIndex].Items.Insert(0, item);
   }
 }
for(int-groupIndex=0;groupIndex<3;++groupIndex){
this.listView1.Groups.Add(“GroupKey”+groupIndex,“Test”+groupIndex);
对于(int-index=0;index<5;++index){
ListViewItem项=新ListViewItem(“测试”+组索引+“/”+索引,
this.listView1.Groups[groupIndex]);
this.listView1.Items.Insert(0,item);
this.listView1.Groups[groupIndex].Items.Insert(0,item);
}
}
对于(int-groupIndex=2;groupIndex>=0;--groupIndex){
对于(int-index=0;index<5;++index){
ListViewItem项=新ListViewItem(“Test2”+组索引+“/”+索引,
this.listView1.Groups[groupIndex]);
this.listView1.Items.Insert(0,item);
this.listView1.Groups[groupIndex].Items.Insert(0,item);
}
}
结果是:
某种魔法

如果将项目添加到列表视图, 并将G组指定给该项目,则该项目将显示在不适当的位置

现在,如果让组保存项(G),将其名称更改为某个临时值,然后更改回原始名称,所有内容都将显示为OK

所以不是

listView1.Items.Insert(0, new ListViewItem("Test", listView1.Groups[0]));


我也有这个问题。我没有使用任何分组或排序。尽管如此,如果我尝试在任何索引处插入,它总是最后显示。我必须创建一个“分类器”,强制listview始终使用与Items集合相同的顺序

class CompareByIndex : IComparer
{
    private readonly ListView _listView;

    public CompareByIndex(ListView listView)
    {
        this._listView = listView;
    }
    public int Compare(object x, object y)
    {
        int i = this._listView.Items.IndexOf((ListViewItem)x);
        int j = this._listView.Items.IndexOf((ListViewItem)y);
        return i - j;
    }
}
以及如何使用它

   this.listView1.ListViewItemSorter = new CompareByIndex(this.listView1);

我希望我可以使用lambda表达式而不是helper类。但是我不知道怎么做。

我想这篇文章也能帮上忙:-对不起,我忘记了this.listView1.Items.Insert(0,item)这一行;我添加了一个示例。我尝试了您的示例代码,但它给出的结果与您的屏幕截图不同。这里Test2总是在Test1之后插入。胡!?我在VisualStudio2010中运行了这个示例。也许微软修正了一个错误?我也是,VS2010,.NET4.0。您是否对listview的属性进行了一些更改?这对我很有帮助,谢谢。然而,在特定索引处的LargeImageList中插入新的图像缩略图是另一回事!可能必须创建新的ImageList并更新listview.LargeImageList。
   this.listView1.ListViewItemSorter = new CompareByIndex(this.listView1);