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

8
我正在使用没有列的ListView控件。
一个列表。
List<String> MyList=new List<string>();

我需要为每个列表MyList的项目在ListView中创建列,以及另一列用于序列号。
例如,如果MyList包含"A", "B" ,"C"
那么列表视图将如下所示:

alt text

我知道我们可以使用forforeach循环来实现这一点。
listView1.Columns.Add("S.No")
for(int i=0;i<MyList.Count;i++)
   {
      listView1.Columns.Add(MyList[i])
   }

但是否有使用LINQLAMBDA表达式来完成这个任务的方法呢?

3个回答

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

我需要添加“序号”列。 - Thorin Oakenshield
3
在使用 Linq 时无需添加 S.No。Linq 只是一种编写循环的简便方式,使代码更易读,没有其他作用。如果必要,可以使用列表的 InsertAt 方法在列表中将 S.No 添加为第一项。 - Aliostad

5

这里有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);

你考虑过简单实用原则选项吗?


0

只是为了更清楚地解释Aliostad所写的内容以及下面这个答案下的评论意思:

所以你现在有这段代码:

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

在底层,它仍然遍历所有元素并对每个元素执行一些功能。你只是不用自己编写循环,但这并不意味着它比你的方法更快或更好。它只是另一种(更短)表达你想要实现的方式。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接