Как очистить подэлементы в ListViewItem без очистки текста? - PullRequest
1 голос
/ 11 января 2012

Я пытаюсь очистить и заново добавить SubItems из ListViewItem в .net.

private void RefreshItem(ListViewItem item)
{
   item.Text = accountNumber;

   item.SubItems.Clear(); //in case there are any
   item.SubItems.Add(name);    
   item.SubItems.Add(address);
   item.SubItems.Add(phone);
   item.SubItems.Add(workphone);
   item.SubItems.Add(email);
   item.SubItems.Add(idType);
   item.SubItems.Add(idNumber);
   item.SubItems.Add(idExpires);
   ...
}

Но очисткаподэлементы также очищают текст Текст .

Примечание: Как это ни парадоксально, очистка SubItems также очищает Text, но добавление SubItems также не добавляет Text.

Проблема также возникает, когда я хочу обновить только подэлементы:

private void RefreshItem(ListViewItem item)
{
   item.SubItems.Clear(); //in case there are any
   item.SubItems.Add(location);    
   item.SubItems.Add(date);
   item.SubItems.Add(cashier);
   item.SubItems.Add(totalBuyAmount);
   item.SubItems.Add(totalSellAmount);
   item.SubItems.Add(currencyCode);
   item.SubItems.Add(exchangeRate);
   item.SubItems.Add(isVip);
   ...
}

Как мне Очистить подэлементов ListViewItem , но не ясно Текст ?

Ответы [ 3 ]

2 голосов
/ 11 января 2012

Интересно, я никогда не замечал такого поведения. Если нет более простого способа, я бы перебрал и удалил все SubItem с Index больше 0. SubItem с индексом 0 соответствует номеру ListViewItem.Text.

Для справки см. Это примечание в свойстве SubItems:

Первый подэлемент в ListViewItem.ListViewSubItemCollection всегда предмет, который владеет подэлементами. При выполнении операций на подпункты в коллекции, не забудьте ссылаться на позицию индекса 1 вместо 0 внести изменения в первый подпункт.

0 голосов
/ 11 января 2012

При обновлении данных в представлениях данных, списках и аналогичных виджетах может быть очень полезно использовать SuspendLayout () и ResumeLayout () вокруг ваших обновлений. Это позволит вам выполнить любую необходимую очистку или манипулирование, при этом пользователь не увидит промежуточные состояния или много мерцания. Я использовал это, чтобы помочь поддерживать порядок сортировки при обновлении и аналогичные проблемы:

public void OnRefreshButtonClicked(object *sender)
{
    myListView.SuspendLayout();

    foreach (ListViewItem itm in myListView.Items)
    {
        RefreshItem(itm);
    }

    myListView.ResumeLayout();
}
0 голосов
/ 11 января 2012

Почему бы просто не изменить текст подэлемента вместо удаления и повторного добавления?

...