Как обновить значение атрибута из объекта в listview

У меня есть два файла. Один файл с классом Древесина. Я создал несколько объектов с этим классом. Эти объекты включают атрибут WoodType и некоторые другие. Я заполнил объекты в массив под названием деревянные объекты. Второй файл - это форма, в которой у меня есть Посмотреть список.

Итак, моей целью было добавить все объекты с их атрибутами в ListView. У меня так получилось:

String[] row = { (listView1.Items.Count + 1).ToString(), WoodType, condition, isDry};
ListViewItem item = new ListViewItem(row);
listView1.Items.Add(item);

Успех.

Теперь мне нужно обновить атрибут WoodType одного объекта в ListView. Для этого я создал кнопку «изменить тип». Я подумал о том, как пользователь щелкает строку, в которой объект он хочет изменить, а затем щелкает кнопку «изменить тип», чтобы изменить его WoodType. Чтобы понять это, я хотел взять индекс строки, а затем изменить значение «WoodType» с его установить Аксессуар примерно следующим образом:

woodObjects[indexOfRowFromListView].WoodType = "Oak Wood";

Да, я знаю, это никогда так не сработает. Итак, мои вопросы: как выбрать правильный индекс и как изменить значение атрибута?

* Я также подумал об удалении объектов, но сохранении их значений, чтобы я мог создавать новые объекты с такими же значениями, кроме WoodType. Я ценю любую помощь!

@MehdiDehghani Проблема в том, что я не знаю, как получить правильный индекс. После того, как я получил индекс, я должен знать, как изменить значение атрибута. Я обновил свой вопрос, чтобы уточнить.

Black Solution 10.08.2018 15:15

ListView должен иметь свойство под названием SelectedIndex.

welrocken 10.08.2018 15:20

@MehdiDehghani Да, я знаю. Я также могу получить ряд с решением Ecordero. На самом деле главная проблема в том, как изменить значение атрибута.

Black Solution 10.08.2018 15:24

@welrocken Спасибо. И как теперь, когда у меня есть индекс, изменить значение атрибута?

Black Solution 10.08.2018 15:24

woodObjects [listView.SelectedIndex] .WoodType = "Новое значение";

welrocken 10.08.2018 15:27

@welrocken Это не сработает. Индекс listView не совпадает с индексом массива.

Black Solution 10.08.2018 15:31

@MehdiDehghani атрибут WoodType. Я хочу изменить его ценность.

Black Solution 10.08.2018 15:33

@MehdiDehghani Спасибо. Я уже мог решить свою проблему :)

Black Solution 10.08.2018 15:51

На что вы ориентируетесь: Winforms, WPF, ASP ..? ВЫ должны всегда правильно пометить свои вопросы, чтобы их можно было увидеть на странице вопросов!

TaW 10.08.2018 16:43
1
9
45
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я думаю, что самым чистым решением вашей проблемы было бы написание новой реализации ListViewItem. Что-то вроде этого:

public class WoodObjectListItem : System.Windows.Forms.ListViewItem
{
    public Wood WoodObject { get; }

    public WoodObjectListItem(int rowNumber, Wood woodObject) 
        : base(new string[] { rowNumber.ToString(), woodObject.WoodType, woodObject.Condition, woodObject.IsDry })
    {
        WoodObject = woodObject;
    }

    public void ChangeType()
    {
        WoodObject.WoodType = "Oak Wood";
    }
}

Затем вы можете добавить свои woodObjects в список, например:

listView1.Items.Add(new WoodObjectListItem(listView1.Items.Count + 1, woodObject));

И когда кнопка нажата, вы можете сделать:

if (listView1.SelectedItem is WoodObjectListItem woodObjectListItem)
    woodObjectListItem.ChangeType();

Огромное спасибо. Решил мою проблему!

Black Solution 10.08.2018 15:49

Другие вопросы по теме