ListView
показывает вложенные элементы, если он находится в представлении Details
и имеет несколько столбцов.
Допустим, у вас есть следующие данные:
var list = new List<KeyValuePair<string, int>>(){
new KeyValuePair<string, int>("ABC", 123),
new KeyValuePair<string, int>("ABC", 456),
new KeyValuePair<string, int>("ABC", 789),
new KeyValuePair<string, int>("DEF", 123),
new KeyValuePair<string, int>("DEF", 233),
};
Для преобразования вашей структуры данныхДля ListView
элементов можно сначала сгруппировать данные на основе ключа:
var data = list.GroupBy(x => x.Key).Select(x => new
{
Key = x.Key,
Values = x.Select(a => a.Value)
});
Затем добавить элементы и вложенные элементы в элемент управления:
foreach(var d in data)
{
var item = listView1.Items.Add(d.Key);
foreach (var v in d.Values)
item.SubItems.Add(v.ToString());
}
И затем настроить ListView
дляпокажите им:
listView1.View = View.Details;
var count = data.Max(x => x.Values.Count());
for (int i = 0; i <= count; i++)
listView1.Columns.Add($"Column {i+1}");
Примечание
Как также упоминалось в комментариях, вероятно, TreeView
больше подходит для отображения таких данных.Если вы хотите добавить эти данные в TreeView
, после группировки данных вы можете использовать следующий код:
foreach (var d in data)
{
var node = treeView1.Nodes.Add(d.Key);
foreach (var v in d.Values)
node.Nodes.Add(v.ToString());
}