web-dev-qa-db-fra.com

C #: comment ajouter des sous-éléments dans ListView

La création d'un élément (sous la clé) est facile, mais comment ajouter des sous-éléments (valeur)?

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

Comme ça:

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

Vous détachez les sous-éléments dans un tableau et ajoutez le tableau en tant qu'élément de liste.

L'ordre dans lequel vous ajoutez des valeurs au tableau dicte la colonne sous laquelle elles apparaissent. Considérez donc les en-têtes de vos sous-éléments comme [0], [1], [2] etc.

Voici un exemple de code:

//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);
}
28
One Monkey

Supposons que vous ayez une collection de listes contenant de nombreux éléments à afficher dans un ListView, prenez l'exemple suivant qui parcourt la collection de listes:

foreach (Inspection inspection in anInspector.getInspections())
  {
    ListViewItem item = new ListViewItem();
    item.Text=anInspector.getInspectorName().ToString();
    item.SubItems.Add(inspection.getInspectionDate().ToShortDateString());
    item.SubItems.Add(inspection.getHouse().getAddress().ToString());
    item.SubItems.Add(inspection.getHouse().getValue().ToString("C"));
    listView1.Items.Add(item);
  }

Ce code produit la sortie suivante dans le ListView (bien sûr, en fonction du nombre d'éléments que vous avez dans la collection de listes):

Fondamentalement, la première colonne est un listviewitem contenant de nombreux sous-éléments (autres colonnes). Cela peut sembler étrange, mais listview est très flexible, vous pouvez même créer un explorateur de fichiers de type Windows avec!

15
jasonco

J'ai affiné cela en utilisant une méthode d'extension sur ListViewItemsCollection. À mon avis, cela rend le code appelant plus concis et favorise également une réutilisation plus générale.

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

L'appel de AddWithTextAndSubItems ressemble à ceci:

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

J'espère que cela t'aides!

3
BrianB

Je pense que la façon la plus rapide/la plus soignée de le faire:

Pour chaque classe, utilisez la méthode string[] obj.ToListViewItem(), puis procédez comme suit:

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

Voici un exemple de définition

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

En prime, vous pouvez avoir une méthode static qui renvoie ColumnHeader[] liste pour configurer les colonnes listview avec

listView1.Columns.AddRange(Person.ListViewHeaders());
3
ja72
ListViewItem item = new ListViewItem();
item.Text = "fdfdfd";
item.SubItems.Add ("melp");
listView.Items.Add(item);
2

Créer un élément listview

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

Généralement:

ListViewItem item = new ListViewItem("Column1Text")
   { Tag = optionalRefToSourceObject };

item.SubItems.Add("Column2Text");
item.SubItems.Add("Column3Text");
myListView.Items.Add(item);
2
Dave Cousineau

ajouter:

.SubItems.Add("asdasdasd");

à la dernière ligne de votre code pour qu'il ressemble à ceci à la fin.

listView1.Items.Add("sdasdasdasd").SubItems.Add("asdasdasd");
2
alpharedx

Génial !! Cela m'a beaucoup aidé. J'avais l'habitude de faire la même chose en utilisant VB6 mais maintenant c'est complètement différent. nous devrions ajouter ceci

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