簡體   English   中英

與C#中的數組列表匹配列表視圖項

[英]match list view items against array list in c#

我有一個包含一些HashTablesArrayList ,並且我有一個包含一些項的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.Clearhttps : //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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM