如何使用C#中的List <string>的内容填充列表视图

Tho*_*eld 9 c#

我有一份清单

    List<String> SampleList=new List<String>();
Run Code Online (Sandbox Code Playgroud)

我需要用列表的内容填充listView

例如,"SampleList"包含

 a
 b
 c
 d
Run Code Online (Sandbox Code Playgroud)

listView应该像是一样填充

 S.No         Item

  1             a
  2             b
  3             c
  4             d
Run Code Online (Sandbox Code Playgroud)

现在我正在为这个方法使用for循环

喜欢

for(int i=0;i<SampleList.Count;i++)
   {
     listView1.Items.Add((i+1).ToString());
     listView1.Items[i].SubItems.Add(SampleList[i]);
   }
Run Code Online (Sandbox Code Playgroud)

还有其他方法可以像数据绑定那样做吗?

提前致谢

Mar*_*ell 5

它必须是一个ListViewListBox很简单:

        using (Form form = new Form())
        {
            List<string> strings = new List<string> {"abc", "def", "ghi"};
            form.Controls.Add(new ListBox() {DataSource = strings});
            Application.Run(form);
        }
Run Code Online (Sandbox Code Playgroud)

对于更丰富的显示,DataGridView也可以这样做,但是你需要额外的一点间接(因为它支持多个列,每行需要一个包装器对象):

        using (Form form = new Form())
        {
            List<string> strings = new List<string> {"abc", "def", "ghi"};
            var indirect = (from s in strings
                            select new {Text = s}).ToList();

            form.Controls.Add(new DataGridView() { DataSource = indirect });
            Application.Run(form);
        }
Run Code Online (Sandbox Code Playgroud)

这也为您提供了添加额外数据的机会,例如:

            var indirect = strings.Select((s,i) =>
                new {Index = i + 1, Text = s}).ToList();
Run Code Online (Sandbox Code Playgroud)


jmo*_*eno 5

不像数据绑定,但您可以使用VirtualMode和RetrieveVirtualItem

listView1.VirtualMode = true;
listView1.RetreiveVirtualItem += new RetrieveVirtualItemEventHandler( this.RetrieveVirtualItem );
listView1.VirtualListSize = SampleList.Count;

private void RetreiveVirtualItem( object sender, RetrieveVirtualItemEventArgs e )
{
     ListViewItem lvItem = new ListViewItem((e.ItemIndex + 1).ToString());
     lvItem.SubItems.Add(SampleList[e.ItemIndex]);
     e.Item = lvItem;
}