【问题标题】:How to add Column header to a ListView in C#如何在 C# 中将列标题添加到 ListView
【发布时间】:2010-11-02 12:00:30
【问题描述】:

我有一个没有列的 ListView 控件。

一个列表

List<String> MyList=new List<string>();

我需要为ListView 中的每个列表MyList 项目创建列,并为序列号创建另一列。

例如,如果MyList 包含"A", "B" ,"C"

那么列表视图会是这样的

我知道我们可以使用 forforeach 循环来做到这一点

listView1.Columns.Add("S.No")
for(int i=0;i<MyList.Count;i++)
   {
      listView1.Columns.Add(MyList[i])
   }

但是有没有办法使用LINQLAMBDA Expression 来做到这一点?

【问题讨论】:

    标签: c# linq listview lambda


    【解决方案1】:
    MyList.ForEach(name => listView1.Columns.Add(name));
    

    【讨论】:

    • 我需要用这个添加“S.No”列。
    • 您不必在 Linq 中添加 S.No。 Linq 只是编写使代码可读的循环的捷径,仅此而已。如果必须,请使用列表的 InsertAt 将 S.No 添加为列表中的第一项。
    【解决方案2】:

    这里有 4 个选项
    至少还有另外 10 种方法可以做到这一点,

    var myList = new List<string>() { "A", "B", "C" };
    
    // 1: Modify original list and use List<>.ForEach()
    myList.Insert(0, "S. No");
    myList.ForEach(x => lisView.Columns.Add(x));
    
    // 2: Add first column and use List<>.ForEach()
    listView.Columns.Add("S. No");
    myList.ForEach(x => listView.Columns.Add(x));
    
    // 3: Don't modify original list
    (new[] { "S. No" }).Concat(myList).ToList()
        .ForEach(x => listView.Columns.Add(x));
    
    // 4: Create ColumnHeader[] with Linq and use ListView.Columns.AddRange()
    var columns = (new[] { "S. No"}).Concat(myList)
        .Select(x => new ColumnHeader { Text = x }).ToArray();
    listView.Columns.AddRange(columns);
    

    您是否考虑过KISS 选项?

    【讨论】:

      【解决方案3】:

      只是为了更清楚地了解 Aliostad 写的内容以及此答案下方的 cmets 的含义:

      所以你目前有这个代码:

      listView1.Columns.Add("S.No")
      for(int i=0;i<MyList.Count;i++)
      {
          listView1.Columns.Add(MyList[i])
      }
      

      正如您已经提到的,您也可以使用foreach 编写它。这看起来像这样:

      listView1.Columns.Add("S.No")
      foreach(var item in MyList)
      {
          listView1.Columns.Add(item)
      }
      

      在第二个示例中,它还遍历列表。它所做的只是隐藏了局部索引变量i

      在第三个示例中,您将不会在需要对列表中的每个项目执行操作的函数中隐藏此迭代:

      listView1.Columns.Add("S.No")
      MyList.ForEach(name => listView1.Columns.Add(name));
      

      在底层它仍然迭代所有元素并在每个元素上执行一些功能。您只是不自己编写循环,但这并不意味着它在任何方面都比您的方法更快或更好。这只是另一种(更短的)方式来说明您想要实现的目标。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-10-03
        • 1970-01-01
        • 1970-01-01
        • 2012-10-11
        • 1970-01-01
        • 1970-01-01
        • 2018-01-21
        相关资源
        最近更新 更多