C# 如何用列表的内容填充列表视图<;字符串>;在C中#

C# 如何用列表的内容填充列表视图<;字符串>;在C中#,c#,C#,我有一张单子 List<String> SampleList=new List<String>(); listView应该像这样填充 S.No Item 1 a 2 b 3 c 4 d 现在我使用for循环来实现这个方法 像 for(int i=0;i不幸的是,windows窗体ListView不支持数据绑定。但是如果您经常更新列

我有一张单子

    List<String> SampleList=new List<String>();
listView应该像这样填充

 S.No         Item

  1             a
  2             b
  3             c
  4             d
现在我使用for循环来实现这个方法


for(int i=0;i不幸的是,windows窗体ListView不支持数据绑定。但是如果您经常更新列表,也许可以使用INotifyProperty界面。

它必须是
ListView
列表框
很简单:

        using (Form form = new Form())
        {
            List<string> strings = new List<string> {"abc", "def", "ghi"};
            form.Controls.Add(new ListBox() {DataSource = strings});
            Application.Run(form);
        }
这也为您提供了添加额外数据的机会,例如数字:

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

不太像数据绑定,但可以使用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; } listView1.VirtualMode=true; listView1.RetreiveVirtualItem+=新的RetrieveVirtualItemEventHandler(this.RetrieveVirtualItem); listView1.VirtualListSize=SampleList.Count; 私有void RetrieveVirtualItem(对象发送方,RetrieveVirtualItemEventArgs e) { ListViewItem lvItem=新的ListViewItem((e.ItemIndex+1.ToString()); lvItem.SubItems.Add(SampleList[e.ItemIndex]); e、 项目=lvItem; }
@Mohammadreza:谢谢……请解释INotifyProperty接口。我不确定更改通知是否是问题的关键部分。@Marc:在我看来,如果您经常需要更新基础组件,数据绑定是有用的。在本例中为ListView。@Pramodh:我非常熟悉该接口(顺便说一句,在这种情况下哪个不适用;它主要是
IBindingList
IBindingListView
),但这与问题无关。。。
        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();
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; }