如何在不清除文本的情况下清除ListViewItem上的子项?

时间:2012-01-11 15:56:30

标签: c# winforms listview listviewitem

我正在尝试清除并重新添加.net中SubItemsListViewItem

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

但清除子项目也会清除Text

  

注意:矛盾的是,清除SubItems也会清除Text,但添加SubItems也不会添加Text

当我只想更新SubItems时,问题也出现了:

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

我如何Clear SubItemsListViewItem,但不清楚Text

3 个答案:

答案 0 :(得分:2)

有趣的是,我从未注意到这种行为。如果没有更简单的方法,我会遍历并删除SubItem大于Index的所有0。索引为SubItem的{​​{1}}是与0对应的{。}}。

供参考,请参阅SubItems属性中的此注释:

  

ListViewItem.ListViewSubItemCollection中的第一个子项是   总是拥有子项目的项目。执行操作时   在集合中的子项目,一定要参考索引位置1   而不是0来改变第一个子项。

答案 1 :(得分:0)

为什么不改变SubItem的文本而不是删除和重新添加?

答案 2 :(得分:0)

在刷新datagridviews,listviews和类似小部件中的数据时,在更新周围使用SuspendLayout()和ResumeLayout()非常有用。这将允许您进行任何需要的清理或操作,而无需用户看到中间状态或大量闪烁。我使用它来帮助维护刷新和类似问题的排序顺序:

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

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

    myListView.ResumeLayout();
}