Hak, o którym mówię powyżej, NIE JEST ZALECANY. Jeśli jednak NAPRAWDĘ chcesz, aby pojawiły się puste grupy, wystarczy przekazać kod dodawania do oddzielnej metody narzędzia, która sprawdza, czy grupa jest pusta. Jeśli tak, dodaje go do "domyślnej" grupy (więc przynajmniej się pojawia), dopóki nie dodasz do niej elementu.
public static void AddGroup(this ListView lv, ListViewGroup lg)
{
if (lg.Items.Count > 0 || lv.Items.Cast<ListViewItem>().Any(tg => tg.Group == lg))
lv.Groups.Add(lg);
else
{
var item = lv.Items.Add(lg.Header);
item.Tag = lg;
}
}
public static void AddItem(this ListView lv, ListViewItem li, string groupKey) // Could also take ListViewGroup here...
{
if (lv.Groups[groupKey] == null && lv.Items.ContainsKey(groupKey))
{
lv.Groups.Add((ListViewGroup)lv.Items[groupKey].Tag);
lv.Items.RemoveByKey(groupKey);
}
lv.Items.Add(li);
li.Group = lv.Groups[groupKey];
}
public static void AddItem(this ListView lv, ListViewItem li, ListViewGroup lg)
{
lv.AddItem(li, lg.Header);
}
Kolejne ostrzeżenie, NIEZALECANE. Jest to dość spore obciążenie i naprawdę nie warte problemów (IMO). Ale hej, do każdego z nich. Ten kod jest całkowicie nieprzetestowany i po prostu go wyrzucamy, jeśli naprawdę POTRZEBUJESZ tego działania (co nigdy nie powinno mieć miejsca, lepiej szukać alternatyw). Najgorsze jest to, że deklaracja grupy znajduje się w samym Listitem, dzięki czemu można łatwo zmienić grupę.
Ostatnie ostrzeżenie, NIEZALECANE.
Edytuj: Zmodyfikowałem powyższy kod, aby był metodami rozszerzenia obiektów ListView, dzięki czemu masz bezpośredni dostęp do ListView z metod. Za każdym razem, gdy dodajesz grupę, możesz po prostu zadzwonić pod numer listView.AddGroup
, dodając element, który możesz wykorzystać w metodach listView.AddItem
. Jest to sprzeczne z metodami listView.Items.Add
i listView.Groups.Add
. Należy pamiętać o tym, że nie trzeba przypisywać elementów do grup, a jedynie przypisywać grupy do elementów. Dzięki temu można przełączać elementy między grupami, zmieniając odniesienie, zamiast usuwać/dodawać odwołania między grupami. Zakłada to również, że zadeklarowałeś, że Header
z ListItemGroup jest taki sam jak Key
(innymi słowy, new ListItemGroup("HeaderText" /*KEY*/, "HeaderText" /*HEADER*/)
. W przeciwnym razie wystarczy zmienić logikę w obrębie AddItem
, aby odnieść się do właściwej wartości (co oznacza Name
, zwykle).)
miarę Wiem, puste grupy po prostu nie są wyświetlane. Możesz dodać pusty element, aby wyświetlić grupę. – nik
Myślę, że masz odpowiedź: –
Prawidłowo. Puste grupy nie wyświetlają się. Najpierw musisz dodać elementy do nich. –