2012-01-11 17 views
0

私はSubItemsListViewItemをクリアして再追加しようとしています。テキストを消去せずにListViewItemのサブアイテムをクリアするには?

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を追加しません。

私は唯一のサブアイテムを更新するときに問題にも表示されます。

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

は、どのように私はListViewItemSubItemsClearが、Textをクリアすることはできませんか?

+3

あなたはローカル変数で 'Text'を保存することはできません、' SubItems'た後、再設定 'Text'をクリア?おそらく最も理想的な解決策ではありません。 –

+2

なぜサブアイテムをクリアしたいのですが、それに関連するテキストは消去したくないのです。 – John

+0

@ジョンあなたは間違っているかもしれないと思います。 'Text'は' ListItem'自体のテキストです。 ListItemはSubItemを持つことができます。私はListItem.SubItemsコレクションをクリアしたいが、ListItem.Textプロパティは残しておく。 –

答えて

2

興味深いことに、私はその行動に気付かなかった。簡単な方法がない場合は、Index0より大きいすべてのSubItemをループして削除します。インデックス0SubItemは、ListViewItem.Textに対応するものです。参考のため

SubItemsプロパティにこのノートを参照してください。

ListViewItem.ListViewSubItemCollectionの最初のサブアイテムが常に サブ項目を所有しているアイテムです。コレクション内のサブアイテムに対して の操作を実行する場合は、0の代わりにインデックス位置1 を参照して、最初のサブアイテムを変更してください。

+0

'(boolean workCorrectly)'パラメータを使って拡張メソッドを追加しました。 'ListViewItem.SubItems'コレクションをクリアし、' ListViewItem.Text'プロパティだけを残します。 –

0

削除して再追加するのではなく、SubItemのテキストを変更するだけではどうですか?

+0

関数が始まるときにいくつのサブアイテムがあるのか​​分かりません –

0

DataGridviews、listviewsなどのウィジェットでデータを更新するときに、更新に関するSuspendLayout()およびResumeLayout()を使用すると非常に便利です。これにより、ユーザーが中間状態やちらつきが多くなくても必要なクリーンアップや操作を行うことができます。私はリフレッシュと同様の問題を超える注文ソート維持を支援するために、これを使用しています

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

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

    myListView.ResumeLayout(); 
} 
関連する問題