0

ArrayListいくつかのを含むHashTablesがあり、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);
            }

このコードは、すべての配列リスト項目をチェックなしでリスト ビューに追加します。

4

1 に答える 1

0

最初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

編集:あなたは、ArrayListにないアイテムをListViewから削除し、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);
}
于 2012-07-09T22:16:46.593 に答える