Предотвратить двойные записи в ListView с помощью C #? - PullRequest
1 голос
/ 10 сентября 2009

Как мы можем получить доступ к элементам, добавленным в ListView ?

Я должен сделать следующее: добавить элемент в список. Я хочу проверить, присутствует ли элемент для добавления в просмотр списка в ListView.

Я использую C # и Visual Studio 2005.

Ответы [ 6 ]

17 голосов
/ 10 сентября 2009

Класс ListView предоставляет несколько различных методов для определения наличия элемента:

Их можно использовать следующим образом:

// assuming you had a pre-existing item
ListViewItem item = ListView1.FindItemWithText("test");
if (!ListView1.Items.Contains(item))
{
    // doesn't exist, add it
}

// or you could find it by the item's text value
ListViewItem item = ListView1.FindItemWithText("test");
if (item != null)
{
    // it exists
}
else
{
    // doesn't exist
}

// you can also use the overloaded method to match sub items
ListViewItem item = ListView1.FindItemWithText("world", true, 0);
3 голосов
/ 10 сентября 2009

Просто добавьте свои предметы и убедитесь, что вы назначаете имя. затем просто используйте метод ContainsKey из коллекции Items для определите, есть ли он, вот так.

for (int i = 0; i < 20; i++)
{
    ListViewItem item = new ListViewItem("Item" + i.ToString("00"));
    item.Name = "Item"+ i.ToString("00");
    listView1.Items.Add(item);
}
MessageBox.Show(listView1.Items.ContainsKey("Item00").ToString()); // True
MessageBox.Show(listView1.Items.ContainsKey("Item20").ToString()); // False
1 голос
/ 10 сентября 2009

Вы можете сделать что-то вроде этого:

 ListViewItem itemToAdd;
 bool exists = false;
 foreach (ListViewItem item in yourListView.Items) 
 {
    if(item == itemToAdd)
        exists=true;
 }

 if(!exists)
     yourListView.Items.Add(itemToAdd);
0 голосов
/ 24 июля 2013

В случае многоколоночного ListView, вы можете использовать следующий код для предотвращения дублирования записи в любом столбце:

Давайте предположим, что есть класс Судья, подобный этому

public class Judge
    {
        public string judgename;
        public bool judgement;
        public string sequence;
        public bool author;
        public int id;

    }

И я хочу добавить уникальный объект этого класса в ListView. В этом классе идентификатор уникальное поле, поэтому я могу проверить уникальную запись в ListView с помощью этого поля.

Judge judge = new Judge
                {
                    judgename = comboName.Text,
                    judgement = checkjudgement.Checked,
                    sequence = txtsequence.Text,
                    author = checkauthor.Checked,
                    id = Convert.ToInt32(comboName.SelectedValue)
                };

            ListViewItem lvi = new ListViewItem(judge.judgename);
            lvi.SubItems.Add(judge.judgement ? "Yes" : "No");
            lvi.SubItems.Add(string.IsNullOrEmpty(judge.sequence) ? "" : txtsequence.Text);
            lvi.SubItems.Add(judge.author ? "Yes" : "No");
            lvi.SubItems.Add((judge.id).ToString());
            if (listView1.Items.Count != 0)
            {
                ListViewItem item = listView1.FindItemWithText(comboName.SelectedValue.ToString(), true, 0);
                if (item != null)
                {
                    // it exists
                }
                else
                {
                    // doesn't exist
                }

            }
0 голосов
/ 10 сентября 2009

Следующее поможет найти ListViewItem в элементе управления ListView, как только вы добавите его:

string key = <some generated value that defines the key per item>;
if (!theListViewControl.Items.ContainsKey(key))
{
    item = theListViewControl.Items.Add(key, "initial text", -1);

}

// now we get the list item based on the key, since we already 
// added it if it does not exist
item = theListViewControl.Items[key];
...

Примечание key, используемый для добавления элемента в коллекцию элементов ListView, может быть любым уникальным значением, которое может идентифицировать ListViewItem в коллекции элементов. Например, это может быть значение хеш-кода или какое-либо свойство объекта, прикрепленного к ListViewItem.

0 голосов
/ 10 сентября 2009

Небольшая поправка в ответе Роббана

 ListViewItem itemToAdd;
 bool exists = false;
 foreach (ListViewItem item in yourListView.Items)
 {
    if(item == itemToAdd)
    {
       exists=true; 
       break; // Break the loop if the item found.
    }
 }
 if(!exists)
 {
    yourListView.Items.Add(itemToAdd);
 }
 else
 {
    MessageBox.Show("This item already exists");
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...