with - C#: come aggiungere elementi secondari in ListView




listview with columns c# (7)

Come questo:

ListViewItem lvi = new ListViewItem();
lvi.SubItems.Add("SubItem");
listView1.Items.Add(lvi);

Creare un oggetto (sotto la chiave) è facile, ma come aggiungere elementi secondari (Valore)?

listView1.Columns.Add("Key");
listView1.Columns.Add("Value");
listView1.Items.Add("sdasdasdasd");
//How to add "asdasdasd" under value?

Crea un oggetto listview

ListViewItem item1 = new ListViewItem("sdasdasdasd", 0)
item1.SubItems.Add("asdasdasd")

Grande !! Mi ha aiutato molto. Ho usato lo stesso usando VB6 ma ora è completamente diverso. dovremmo aggiungere questo

listView1.View = System.Windows.Forms.View.Details;
listView1.GridLines = true; 
listView1.FullRowSelect = true;

Ho raffinato questo utilizzando un metodo di estensione su ListViewItemsCollection. A mio parere, rende il codice chiamante più conciso e promuove anche un riutilizzo più generale.

internal static class ListViewItemCollectionExtender
{
    internal static void AddWithTextAndSubItems(
                                   this ListView.ListViewItemCollection col, 
                                   string text, params string[] subItems)
    {
        var item = new ListViewItem(text);
        foreach (var subItem in subItems)
        {
            item.SubItems.Add(subItem);
        }
        col.Add(item);
    }
}

La chiamata a AddWithTextAndSubItems ha il seguente aspetto:

// can have many sub items as it's string array
myListViewControl.Items.AddWithTextAndSubItems("Text", "Sub Item 1", "Sub Item 2"); 

Spero che questo ti aiuti!


Penso che il modo più veloce / più preciso per farlo:

Per ogni classe hai il metodo string[] obj.ToListViewItem() e poi fai questo:

foreach(var item in personList)
{
    listView1.Items.Add(new ListViewItem(item.ToListViewItem()));
}

Ecco una definizione di esempio

public class Person
{
    public string Name { get; set; }
    public string Address { get; set; }
    public DateTime DOB { get; set; }
    public uint ID { get; set; }

    public string[] ToListViewItem()
    {
        return new string[] {
            ID.ToString("000000"),
            Name,
            Address,
            DOB.ToShortDateString()
        };
    }
}

Come bonus aggiuntivo puoi avere un metodo static che restituisce l'elenco ColumnHeader[] per l'impostazione delle colonne listview con

listView1.Columns.AddRange(Person.ListViewHeaders());

Si colpisce i sottotemi in una matrice e si aggiunge la matrice come voce di elenco.

L'ordine in cui aggiungi valori all'array determina la colonna in cui appaiono, quindi pensa alle intestazioni delle voci secondarie come [0], [1], [2] ecc.

Ecco un esempio di codice:

//In this example an array of three items is added to a three column listview
string[] saLvwItem = new string[3];

foreach (string wholeitem in listofitems)
{
     saLvwItem[0] = "Status Message";
     saLvwItem[1] = wholeitem;
     saLvwItem[2] = DateTime.Now.ToString("dddd dd/MM/yyyy - HH:mm:ss");

     ListViewItem lvi = new ListViewItem(saLvwItem);

     lvwMyListView.Items.Add(lvi);
}

ListViewItem item = new ListViewItem();
item.Text = "fdfdfd";
item.SubItems.Add ("melp");
listView.Items.Add(item);




view