C # Поиск предмета и возврат в ListView - PullRequest
0 голосов
/ 02 мая 2018

У меня есть вопрос о Listview в C # Мой список содержит 2 столбца, например:

colDATA1          colDATA2
 Value1            Amount1
 Value2            Amount2
 Value3            Amount3
 Value4            Amount4

И что я пытаюсь сделать, это поиск Amount5 в Listview. Если не существует, то сделать что-то. А если существует, вернуть Value5

Я пытаюсь найти и использовать код, подобный следующему:

If (Listview1.items.containskey("Amount5"))
{}
else
{MessageBox.show("Not Found")}

or if exist then return the value5 *I have no idea how to do.

Я ищу это в Google, но у большинства из них есть только 1 столбец, и когда я использую код, код не будет работать.

My question is :
 1. How can I get Value5 if Amount5 exist.

Спасибо.

Код для добавления предметов

First Set listView1 Property "View : Details" Then Using this code
this.Listview1.Items.Add(new ListViewItem(new string[] { Value1, Amount1 }));

1 Ответ

0 голосов
/ 02 мая 2018

ОП уже разобрался, но это только для дальнейшего использования, если кому-то это нужно.

Чего не хватало в OP, так это в том, что ListView хранит свои элементы как объекты в свойстве Items.

If (Listview1.items.containskey("Amount5"))
{}
else
{MessageBox.show("Not Found")}

содержит ключ, как правило, в словарных структурах данных. Однако Items контроллера ListView - это ItemCollection (для словарей вы можете использовать DataGrid)

В вашем случае я бы сделал это, используя Linq.

 // Returns the first item that satisfies the condition or null if none does.
        ListViewItem found = items.FirstOrDefault(i => i.SubItems[1].Text.Equals("Amount5"));

        if(found != null) {

            MessageBox.Show(found.SubItems[0].Text.ToString());
        }
        else {

            MessageBox.Show("Not Found!");

        }

Вы все еще можете использовать цикл for, чтобы сделать то же самое.

Если я хочу использовать цикл foreach (поскольку Linq нельзя напрямую использовать в ListView.Item)

      ListViewItem found = null;

        foreach (ListViewItem item in listView1.Items) {

            if (item.SubItems[1].Text.Equals("Amount5")) {

                // If a match was found break the loop.
                found = item;
                break;
            }

        }

        if (found != null) {

            MessageBox.Show(found.SubItems[0].Text.ToString());
        }
        else {

            MessageBox.Show("Not Found!");

        }

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...