Aleks Serov Опубликовано 20 августа, 2019 Поделиться Опубликовано 20 августа, 2019 Здравствуйте! Вывожу данные в список ListView который состоит из двух колонок: Text1, Text2(DynamicAppearance): var MyItem:TListViewItem; begin MyItem :=Form1.Listview1.Items.Add; MyItem.Data['Text1']:='Яблоки';//товар MyItem.Data['Text2']:='100';//цена MyItem :=Form1.Listview1.Items.Add; MyItem.Data['Text1']:='Груши';//товар MyItem.Data['Text2']:='120';//цена MyItem :=Form1.Listview1.Items.Add; MyItem.Data['Text1']:='Дыни';//товар MyItem.Data['Text2']:='80';//цена end; Заполнил строки и теперь по нажатию кнопки надо посчитать общую сумму товаров. В VCL в цикле легко и просто, а вот в FMX нет такого понятия SubItems в ListView и обратиться к нему нельзя ((( Перепробовал все что удалось нагулить, результат нулевой. Как решить вопрос? Цитата Ссылка на комментарий
0 #WAMACO Опубликовано 20 августа, 2019 Поделиться Опубликовано 20 августа, 2019 Использовать модель данных и все подсчеты вести на основании модели. ListView используйте только, как представление Ваших данных и не храните в нем ничего! Цитата Ссылка на комментарий
0 Евгений Корепов Опубликовано 21 августа, 2019 Поделиться Опубликовано 21 августа, 2019 (изменено) 22 часа назад, Aleks Serov сказал: Здравствуйте! Вывожу данные в список ListView который состоит из двух колонок: Text1, Text2(DynamicAppearance): var MyItem:TListViewItem; begin MyItem :=Form1.Listview1.Items.Add; MyItem.Data['Text1']:='Яблоки';//товар MyItem.Data['Text2']:='100';//цена MyItem :=Form1.Listview1.Items.Add; MyItem.Data['Text1']:='Груши';//товар MyItem.Data['Text2']:='120';//цена MyItem :=Form1.Listview1.Items.Add; MyItem.Data['Text1']:='Дыни';//товар MyItem.Data['Text2']:='80';//цена end; Заполнил строки и теперь по нажатию кнопки надо посчитать общую сумму товаров. В VCL в цикле легко и просто, а вот в FMX нет такого понятия SubItems в ListView и обратиться к нему нельзя ((( Перепробовал все что удалось нагулить, результат нулевой. Как решить вопрос? Все тоже самое что и VLC, только чуток по другому: procedure TForm1.FillListView; var AItem : TListViewItem; begin AItem :=Listview.Items.Add; AItem.Data['Text1']:='Яблоки';//товар AItem.Data['Cost']:=100;//цена AItem :=Listview.Items.Add; AItem.Data['Text1']:='Груши';//товар AItem.Data['Cost']:=120;//цена AItem :=Listview.Items.Add; AItem.Data['Text1']:='Дыни';//товар AItem.Data['Cost']:=80;//ценаend; end; procedure TForm1.ProcessingListView; var I : Integer; AItem : TListViewItem; ASum : Currency; begin ASum:=0; for I := 0 to ListView.Items.Count - 1 do begin AItem:=(ListView.Items.Item[I] as TListViewItem); ASum:=ASum + AItem.Data['Cost'].AsCurrency; end; Label1.Text:=CurrToStr(ASum); end; Обратите внимание - цену присваиваем как число, а не как строку (не за чем лишние преобразования делать) AItem.Data['Cost']:=120;//цена Вторую процедуру можно было без AItem : TListViewItem; сделать, но для наглядности я сделал именно так. Изменено 21 августа, 2019 пользователем Евгений Корепов Ingalime, Мирзали Пирмагомедов и qz5 2 1 Цитата Ссылка на комментарий
0 Aleks Serov Опубликовано 21 августа, 2019 Автор Поделиться Опубликовано 21 августа, 2019 Большое спасибо! Буду пробовать... Цитата Ссылка на комментарий
0 qz5 Опубликовано 21 августа, 2019 Поделиться Опубликовано 21 августа, 2019 ASum:=ASum + AItem.Data['Cost'].AsCurrency; Наверное будет работать и так в одну строку: TListViewItem (ListView.Items.Item).Data['Cost'].AsCurrency Ваш Капитан Очевидность Цитата Ссылка на комментарий
0 Евгений Корепов Опубликовано 21 августа, 2019 Поделиться Опубликовано 21 августа, 2019 40 минут назад, qz5 сказал: ASum:=ASum + AItem.Data['Cost'].AsCurrency; Наверное будет работать и так в одну строку: TListViewItem (ListView.Items.Item).Data['Cost'].AsCurrency Ваш Капитан Очевидность Да, последняя строчка моего сообщения как раз об этом: Цитата Вторую процедуру можно было без AItem : TListViewItem; сделать, но для наглядности я сделал именно так. Цитата Ссылка на комментарий
0 Aleks Serov Опубликовано 21 августа, 2019 Автор Поделиться Опубликовано 21 августа, 2019 (изменено) Нас троке TListViewItem (ListView1.Items.Item).Data['Cost'].AsCurrency вылетает ошибка: Invalid class type cast (((( где i - переменная цикла перебирающего список Изменено 21 августа, 2019 пользователем Aleks Serov изменение кода программы Цитата Ссылка на комментарий
0 Aleks Serov Опубликовано 21 августа, 2019 Автор Поделиться Опубликовано 21 августа, 2019 чето форум глючит, удаляет в коде квадратные скобки с переменной i цикла после Item Цитата Ссылка на комментарий
0 qz5 Опубликовано 21 августа, 2019 Поделиться Опубликовано 21 августа, 2019 3 часа назад, Евгений Корепов сказал: Да, последняя строчка моего сообщения как раз об этом: извините, совсем слепой стал Цитата Ссылка на комментарий
0 qz5 Опубликовано 21 августа, 2019 Поделиться Опубликовано 21 августа, 2019 3 часа назад, Aleks Serov сказал: Нас троке TListViewItem (ListView1.Items.Item).Data['Cost'].AsCurrency вылетает ошибка: Invalid class type cast (((( где i - переменная цикла перебирающего список вероятно потому, что Вы записали Integer, т.е. целое число, а читаете Currency, а это вещественное число Цитата Ссылка на комментарий
0 Евгений Корепов Опубликовано 21 августа, 2019 Поделиться Опубликовано 21 августа, 2019 43 минуты назад, qz5 сказал: вероятно потому, что Вы записали Integer, т.е. целое число, а читаете Currency, а это вещественное число Поддерживаю. Пишите :=50.0 Цитата Ссылка на комментарий
0 Aleks Serov Опубликовано 21 августа, 2019 Автор Поделиться Опубликовано 21 августа, 2019 Integer читать из базы? AsInteger в конце строки кода написать? Цитата Ссылка на комментарий
0 Евгений Корепов Опубликовано 21 августа, 2019 Поделиться Опубликовано 21 августа, 2019 5 часов назад, Aleks Serov сказал: Нас троке TListViewItem (ListView1.Items.Item).Data['Cost'].AsCurrency вылетает ошибка: Invalid class type cast (((( где i - переменная цикла перебирающего список И сделайте лучше как я предложил - отдельно преобразование класса, отдельно получение данных. Тут invalid class type cast скорее ошибка TListViewItem (ListView1.Items.Item), а не AsCurrency. Вы никак не ускоряете код записывая его одной строкой, но ухудшаете читабельность и усложняете поиск ошибок. Цитата Ссылка на комментарий
0 Aleks Serov Опубликовано 22 августа, 2019 Автор Поделиться Опубликовано 22 августа, 2019 Всем спасибо! Буду пробовать... Цитата Ссылка на комментарий
Вопрос
Aleks Serov
Здравствуйте! Вывожу данные в список ListView который состоит из двух колонок: Text1, Text2(DynamicAppearance):
var
MyItem:TListViewItem;
begin
MyItem :=Form1.Listview1.Items.Add;
MyItem.Data['Text1']:='Яблоки';//товар
MyItem.Data['Text2']:='100';//цена
MyItem :=Form1.Listview1.Items.Add;
MyItem.Data['Text1']:='Груши';//товар
MyItem.Data['Text2']:='120';//цена
MyItem :=Form1.Listview1.Items.Add;
MyItem.Data['Text1']:='Дыни';//товар
MyItem.Data['Text2']:='80';//цена
end;
Заполнил строки и теперь по нажатию кнопки надо посчитать общую сумму товаров.
В VCL в цикле легко и просто, а вот в FMX нет такого понятия SubItems в ListView и обратиться к нему нельзя (((
Перепробовал все что удалось нагулить, результат нулевой. Как решить вопрос?
Ссылка на комментарий
13 ответов на этот вопрос
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.