2013-09-03 2 views
3

Мне нужно проверить, существует ли элемент с определенным именем в коллекции CheckedItems ListView.ListView CheckedItems найти элемент по имени

До сих пор я пытался:

ListViewItem item = new ListViewItem(itemName); 

if (listView1.CheckedItems.IndexOf(item) >= 0) 
    return true; 

и

ListViewItem item = new ListViewItem(itemName); 

if (listView1.CheckedItems.Contains(item)) 
    return true; 

Ни один из тех, кто работал. Есть ли способ сделать это без прокрутки CheckedItems и проверки их по одному?

ответ

1

Вы можете воспользоваться LINQ для этой цели:

bool itemChecked = listView1.CheckedItems.OfType<ListViewItem>() 
          .Any(i => i.Text == itemText); 
//You can also retrieve the item with itemText using FirstOrDefault() 
var checkedItem = listView1.CheckedItems.OfType<ListViewItem>() 
             .FirstOrDefault(i=>i.Text == itemText); 
if(checkedItem != null) { //do you work...} 

Вы также можете использовать ContainsKey, чтобы определить, является ли элемент (с именем itemName):

bool itemChecked = listView1.CheckedItems.ContainsKey(itemName); 
+0

LINQ метод выше сработал когда я изменил 'i.Name' на' i.Text'. Если вы обновите свой ответ, я помечаю его как принятый. –

+0

@ Dr.Greenthumb Это потому, что вы сказали «с определенным именем существует» в вашем вопросе, конечно, если бы вы имели в виду «Текст», это изменило бы его на «Текст». Если это так, 'ContainsKey' нельзя использовать, потому что оно используется для' Name', а не 'Text'. –

+0

Сначала мне казалось, что я могу найти его по имени, но когда я добавил listView1.CheckedItems к часам, не было параметра 'name'. Также вы правы, «ContainsKey» не работал, когда я это пробовал. –

0

Используя новый, вы создаете новый элемент, который не добавляется в представление списка (поскольку он является новым) и поэтому не может быть найден при использовании listView1.Contains (item).

Когда вы добавляете элемент, используйте пару ключ/значение, а использование содержит значения.

1

Избавьтесь от newing вверх ListViewItem и сделать это вместо того, чтобы:

ListViewItem itemYouAreLookingFor = listView1.FindItemWithText("NameToLookFor"); 

// Did we find a match? 
if (itemYouAreLookingFor != null) 
{ 
    // Yes, so find out if the item is checked or not? 
    if(itemYouAreLookingFor.Checked) 
    { 
     // Yes, it is found and check so do something with item here 
    } 
} 
Смежные вопросы