我想檢查listview
中的約3000項。這是一段代碼:查看所有listview項目與巨大的列表項目?
foreach (ListViewItem item in this.lvItem.Items)
{
item.Checked = !item.Checked;
}
但是,當檢查項目時,listview非常慢。請給我一些想法來解決這個問題?謝謝。
我想檢查listview
中的約3000項。這是一段代碼:查看所有listview項目與巨大的列表項目?
foreach (ListViewItem item in this.lvItem.Items)
{
item.Checked = !item.Checked;
}
但是,當檢查項目時,listview非常慢。請給我一些想法來解決這個問題?謝謝。
這樣的事情會爲你工作嗎? ...選中時,將項目添加到詞典...未選中時,從詞典中刪除。沒有測試代碼,但想知道你是否可以這樣做:
Dictionary<String, ListViewItem> Dic = listView.Items
.Cast<ListViewItem>()
.ToDictionary(x => x.Text, x => x.SubItems[0].Checked);
你問過如何更好地去做。我說的是在你的Check Event上你會想要添加項目到你的列表視圖。我懷疑用戶是否真的會檢查所有3000,因此更改代碼以決定如何處理選中的項目,我給出的示例使用Lambda表達式。如果不熟悉,那麼請改變你的問題,以反映你真正需要和/或想要的是什麼...
我聽到一個傳聞,對於大型列表項,for循環將比foreach循環工作得更快 嘗試
for(int i = 0; i = < this.1vItem.Items.Count; i++)
{
//Stuff
}
我也不認爲期望用戶點擊3000個項目是不明智的。但是最近我做了一些事情,當添加物品時,知道應該檢查的物品永遠不會很多,並且在之前將物品添加到列表中。
事情是這樣的:
foreach (Recipient recipient in recipients)
{
var item = new ListViewItem(recipient.FirstName + " " + recipient.LastName);
item.Tag = recipient;
item.Checked = true;
lvRicipients.Items.Add(item);
}
for (int i = 0; i <= listView1.Items.Count - 1; i++)
{
if (!listView1.Items[i].Checked)
listView1.Items[i].Checked = true;
}
我的想法:你爲什麼需要在ListView 3000個項目?我不認爲有人會通過它並逐個打勾。他們應該很好地分組和組織。 – 2011-12-19 02:35:17