我有一个清单
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]);
}
还有其他方法可以像数据绑定那样做吗?
提前致谢
答案 0 :(得分:5)
是否必须是ListView
? ListBox
很简单:
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界面。