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

时间:2010-06-22 08:55:13

标签: c#

我有一个清单

    List<String> SampleList=new List<String>();

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

例如,“SampleList”包含

 a
 b
 c
 d

listView应该像

一样填充
 S.No         Item

  1             a
  2             b
  3             c
  4             d

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

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

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

提前致谢

3 个答案:

答案 0 :(得分: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);
        }

对于更丰富的显示,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);
        }

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

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

答案 1 :(得分: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;
}

答案 2 :(得分:0)

不幸的是,Windows窗体ListView不支持DataBinding。但是,如果您经常更新列表,也许您可​​以使用INotifyProperty界面。