/ / C # ustawienie Tekst Podelementu pozycji ListView nie jest wyświetlany - c #, winformy, listview

Ustawienie C # Element Podelement pozycji ListView nie wyświetla się - c #, winformy, listview

Trochę tu tracę rozum. Kiedy początkowo buduję ListView, działa on całkowicie zgodnie z oczekiwaniami:

ListViewItem listViewItem = listView.Items.Add(model.Id.ToString(), model.Name, model.Id.ToString());
listViewItem.SubItems.AddRange(new ListViewItem.ListViewSubItem[]
{
new ListViewItem.ListViewSubItem() {Name = "ArtNr", Text = model.ArticleNumber},
new ListViewItem.ListViewSubItem() {Name = "Quantity", Text = "XXX"},
});

Mam 3 kolumny zdefiniowane w formancie i wyświetlają kolejno Nazwa, Numer artykułu i "XXX".

Na późniejszym etapie muszę zastąpić "XXX" rzeczywistymi danymi i wykonać następujące czynności:

foreach (ListViewItem listViewItem in listView.Items)
{
InvoiceLine invoiceLine = FindInvoiceLine(...);
if (invoiceLine == null)
continue;

listViewItem.SubItems["Quantity"].Text = invoiceLine.Quantity.ToString();
}

Widzę, że Tekst faktycznie jest ustawiony wWłaściwego SubItem.Text, również jeśli sprawdzę później, podczas odwoływania się do listview poprzez inne odwołanie, tj. wiem, że patrzę na właściwy obiekt. Jednak GUI nie odzwierciedla zmiany, nadal mówi "XXX" w trzeciej kolumnie.

Co daje?!

Odpowiedzi:

3 dla odpowiedzi № 1

Po wykopaniu kodu źródłowego .NET Framework stwierdziłem, że jest on zdecydowanie wadliwy AddRange metoda. Zapomnieli ustawić właściciela ListViewSubItem, więc tekst nie był aktualizowany podczas ustawiania właściwości Text.

Powinieneś użyć Dodaj (ListViewSubItem) zamiast.

lub użyj konstruktora podinementu z parametrem, aby ustawić dla niego właściciela.

listViewItem.SubItems.AddRange(new ListViewItem.ListViewSubItem[]
{
new ListViewItem.ListViewSubItem(listViewItem, model.ArticleNumber) {Name = "ArtNr" },
new ListViewItem.ListViewSubItem(listViewItem, "XXX") {Name = "Quantity" },
});