.NET 3.x Добавление данных из ListBox в ListView с проверкой - C#
Формулировка задачи:
Здравствуйте, господа знатоки.
Есть Listview с колонками 1,2,3. Выглядит примерно так:
---
Название Количество Свойства
оранжевый 1 10000
Капуста 1 50000
Червяк 1 300
---
ListView заполняется из элементов типа ListBox, присутствующих на форме. Вот один из примеров такого ListBox:
---
капуста
морковь
червяк
дыня
...
---
Подразумеваемый механизм работы:
1. Тыкаем кнопку, относящуюся к ListBox. Выбранный элемент (SelectedItem), например "червяк" попадает в ListView. В ListBox у него видно только название "червяк", а "свойства" пользователю не видны.
2. Если в ListView уже есть такой item "червяк", то инфу из колонки #1 не меняем, в колонке #2 мы делаем ++, а в колонке #3 делаем текущий+добавляемый. Должно получиться так:
---
...
червяк 2 600
3. И, соответственно, если ListView нет элемента "червяк", то росто добавляем всё, что нужно в однократном размере.
Как бы это выглядело в коде? Пока не могу найти, как организовать все эти проверки (есть-нет элемента).
Решение задачи: «.NET 3.x Добавление данных из ListBox в ListView с проверкой»
textual
Листинг программы
public partial class Form1 : Form
{
List<IndeterminateObject> _someObjects;
public Form1()
{
InitializeComponent();
_someObjects = new List<IndeterminateObject>()
{
new IndeterminateObject("Капуста", 300),
new IndeterminateObject("Лопата", 1200),
new IndeterminateObject("Дыня", 220)
};
objecstListBox.DisplayMember = "Name";
objecstListBox.DataSource = _someObjects;
}
private void ToListViewButton_Click(object sender, EventArgs e)
{
AddToListView((IndeterminateObject)objecstListBox.SelectedItem);
}
private void AddToListView(IndeterminateObject obj)
{
foreach (ListViewItem item in detailedObjListView.Items)
{
if (item.Text == obj.Name)
{
UpdateListViewItem(item, obj);
return;
}
}
UpdateListViewItem(detailedObjListView.Items.Add(string.Empty), obj);
}
private void UpdateListViewItem(ListViewItem item, IndeterminateObject obj)
{
List<IndeterminateObject> listObj = null;
if (item.Tag != null)
{
listObj = (List<IndeterminateObject>)item.Tag;
listObj.Add(obj);
item.Text = obj.Name;
item.SubItems[1].Text = listObj.Count.ToString();
item.SubItems[2].Text = (obj.Property * listObj.Count).ToString();
}
else
{
listObj = new List<IndeterminateObject>();
listObj.Add(obj);
item.Tag = listObj;
item.Text = obj.Name;
item.SubItems.Add(listObj.Count.ToString());
item.SubItems.Add((obj.Property * listObj.Count).ToString());
}
}
}