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?
Comme ça:
ListViewItem lvi = new ListViewItem();
lvi.SubItems.Add("SubItem");
listView1.Items.Add(lvi);
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);
}
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!
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!
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());
ListViewItem item = new ListViewItem();
item.Text = "fdfdfd";
item.SubItems.Add ("melp");
listView.Items.Add(item);
Créer un élément listview
ListViewItem item1 = new ListViewItem("sdasdasdasd", 0)
item1.SubItems.Add("asdasdasd")
Généralement:
ListViewItem item = new ListViewItem("Column1Text")
{ Tag = optionalRefToSourceObject };
item.SubItems.Add("Column2Text");
item.SubItems.Add("Column3Text");
myListView.Items.Add(item);
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");
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;