【问题标题】:How to fill a list view with the contents of List<string> in C#如何在 C# 中用 List<string> 的内容填充列表视图
【发布时间】:2010-06-22 08:55:13
【问题描述】:

我有一个清单

    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]);
   }

有没有其他方法可以做到这一点,比如数据绑定?

提前致谢

【问题讨论】:

    标签: c#


    【解决方案1】:

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

    listView1.VirtualMode = true; listView1.RetrieveVirtualItem += new RetrieveVirtualItemEventHandler(this.RetrieveVirtualItem); listView1.VirtualListSize = SampleList.Count; 私人无效RetreiveVirtualItem(对象发送者,RetrieveVirtualItemEventArgs e) { ListViewItem lvItem = new ListViewItem((e.ItemIndex + 1).ToString()); lvItem.SubItems.Add(SampleList[e.ItemIndex]); e.Item = lvItem; }

    【讨论】:

      【解决方案2】:

      必须是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();
      

      【讨论】:

        【解决方案3】:

        不幸的是,windows 窗体 ListView 不支持 DataBinding。但是如果你经常更新列表,也许你可以使用 INotifyProperty 接口。

        【讨论】:

        • @Mohammadreza:谢谢...请解释一下INotifyProperty接口。
        • 我不确定更改通知是否是问题的关键部分。
        • @Marc:在我看来,如果您经常需要更新底层组件,DataBinding 很有用。在本例中为 ListView。 @普拉莫德:msdn.microsoft.com/en-us/library/…
        • 我对界面非常熟悉(顺便说一下,not 在这种情况下适用;主要是 IBindingListIBindingListView),但那不是不要让它与问题相关......
        猜你喜欢
        • 2011-03-06
        • 2020-10-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多