如何在C#中将列标题添加到ListView

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

一个清单

List MyList=new List(); 

我需要为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

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

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

 var myList = new List() { "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选项吗?

只是为了让Aliostad写的更清楚一点,以及这个答案下面的评论意味着什么:

所以你目前有这个代码:

 listView1.Columns.Add("S.No") for(int i=0;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)); 

在引擎盖下,它仍然遍历所有元素并在每个元素上执行一些function。 你不是自己编写循环,但这并不意味着它比你的方法更快或更好。 这只是另一种(更短的)方式来告诉你想要实现的目标。