[英]match list view items against array list in c#
我有一個包含一些HashTables
的ArrayList
,並且我有一個包含一些項的ListView
。
我需要的是將數組列表與列表項進行匹配。
如果項目在列表視圖中而不在數組列表中,則應將其從列表視圖中刪除。
如果不在列表視圖或數組列表中,則將其添加到列表視圖。
這是一些代碼:
ArrayList online_list = users;
foreach (Hashtable i in online_list)
{
ListViewItem item = new ListViewItem();
item.Text = (string)i["u_name"];
item.Name = (string)i["id"];
item.ImageIndex = 0;
lstvUsers.Items.Add(item);
}
此代碼無需檢查就將所有數組列表項添加到列表視圖中!
您可以先clear
ListView
所有項目,然后將其添加到ArrayList
:
lstvUsers.Clear();
foreach (Hashtable i in online_list)
{
ListViewItem item = new ListViewItem();
item.Text = (string)i["u_name"];
item.Name = (string)i["id"];
item.ImageIndex = 0;
lstvUsers.Items.Add(item);
}
您應該使用ListView.Clear
而不是ListView.Items.Clear
: https : //stackoverflow.com/a/10170049/284240
編輯 :由於您堅持要只從ListView中刪除不在ArrayList中的項目,並添加不在ListView中但在ArrayList中的項目。 這種方法的效率明顯降低,因為您需要將ListView中的每個項目與ArrayList中的每個項目進行比較(反之亦然),而不是不進行任何比較。
例如:
var addItems = online_list
.Cast<Hashtable>()
.Where(ht => !lstvUsers.Items.ContainsKey((string)ht["id"]));
var removeItems = lstvUsers.Items
.Cast<ListViewItem>()
.Where(lvi => !online_list.Cast<Hashtable>().Any(ht => (string)ht["id"] ==lvi.Name));
foreach (var removeItem in removeItems)
{
lstvUsers.Items.Remove(removeItem);
}
foreach (var addHashTable in addItems)
{
ListViewItem item = new ListViewItem();
item.Text = (string)addHashTable["u_name"];
item.Name = (string)addHashTable["id"];
lstvUsers.Items.Add(item);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.