C # listView, jak dodać elementy do kolumn 2, 3 i 4 itd.?

106

Aby dodać elementy do kolumny 1 w kontrolce listView( Winform), której używam listView1.Items.Add, działa to dobrze, ale jak dodać elementy do kolumn 2 i 3 itp.?

Kiquenet
źródło
8
+1: Dobre pytanie. ta część kontrolki ListView jest bardzo zagmatwana i nieintuicyjna. Czasami naprawdę myślę, że nienawidzą programistów @ MS
Mehdi LAMRANI
1
@Mika: Nie jest łatwo odciąć użytkownika od złożoności solidnego projektu GUI.
Christopher Berman,
1
(To brzmiało w mojej głowie o wiele mniej protekcjonalnie; przepraszam!)
Christopher Berman
Dodaj do subiiems
Ramankingdom

Odpowiedzi:

134

Można to zrobić na kilka sposobów, ale tutaj jest jedno rozwiązanie (na 4 kolumny).

string[] row1 = { "s1", "s2", "s3" };
listView1.Items.Add("Column1Text").SubItems.AddRange(row1);

Bardziej szczegółowy sposób jest tutaj:

ListViewItem item1 = new ListViewItem("Something");
item1.SubItems.Add("SubItem1a");
item1.SubItems.Add("SubItem1b");
item1.SubItems.Add("SubItem1c");

ListViewItem item2 = new ListViewItem("Something2");
item2.SubItems.Add("SubItem2a");
item2.SubItems.Add("SubItem2b");
item2.SubItems.Add("SubItem2c");

ListViewItem item3 = new ListViewItem("Something3");
item3.SubItems.Add("SubItem3a");
item3.SubItems.Add("SubItem3b");
item3.SubItems.Add("SubItem3c");

ListView1.Items.AddRange(new ListViewItem[] {item1,item2,item3});
Inisheer
źródło
65

Możesz dodawać elementy / elementy podrzędne do ListView, takie jak:

ListViewItem item = new ListViewItem(new []{"1","2","3","4"});
listView1.Items.Add(item);

Ale podejrzewam, że problem dotyczy typu widoku . Ustaw go w projektancie na Szczegóły lub wykonaj następujące czynności w kodzie:

listView1.View = View.Details;
bruno conde
źródło
2
Bardzo ważne jest również użycie „listView1.FullRowSelect = true” ... w przeciwnym razie tylko kolumna 1 jest klikalna. Żałuję, że nie wiedziałem o tym wcześniej! zaoszczędziłoby mi to mnóstwo pracy.
John Henckel
Szczególnie pomogła mi uwaga o listView1.View! Dzięki!
Dev.Jaap
7
 private void MainTimesheetForm_Load(object sender, EventArgs e)
        {
            ListViewItem newList = new ListViewItem("1");
            newList.SubItems.Add("2");
            newList.SubItems.Add(DateTime.Now.ToLongTimeString());
            newList.SubItems.Add("3");
            newList.SubItems.Add("4");
            newList.SubItems.Add("5");
            newList.SubItems.Add("6");
            listViewTimeSheet.Items.Add(newList);

        }
ken4ward
źródło
7

Oto dokumentacja msdn dotycząca obiektu listview i obiektu listviewItem.
http://msdn.microsoft.com/en-us/library/system.windows.forms.listview.aspx
http://msdn.microsoft.com/en-us/library/system.windows.forms.listviewitem.aspx

Gorąco polecam przynajmniej poświęcić trochę czasu na przejrzenie dokumentacji wszystkich obiektów, których używasz z frameworka .net. Chociaż dokumentacja może być czasami dość uboga, nadal jest nieoceniona, zwłaszcza gdy napotkasz takie sytuacje.

Ale jak powiedział James Atkinson, jest to po prostu kwestia dodania elementów podrzędnych do elementu widoku listy w następujący sposób:

ListViewItem i = new ListViewItem("column1");
i.SubItems.Add("column2");
i.SubItems.Add("column3");
Calvin R.
źródło
4

W przypadku problemu użyj w ten sposób:

ListViewItem row = new ListViewItem(); 
row.SubItems.Add(value.ToString()); 
listview1.Items.Add(row);
OneM
źródło
0

Jedna linia, którą stworzyłem i działa:

listView1.Items.Add(new ListViewItem { ImageIndex = 0, Text = randomArray["maintext"], SubItems = { randomArray["columntext2"], randomArray["columntext3"] } });
David Rodrigues
źródło
-2

Użyj ListViewSubItem - zobacz: MSDN

Jan Bannister
źródło