Перейти к содержанию
Fire Monkey от А до Я
  • 0

FMX ListView, вывод и чтение данных списка


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 и обратиться к нему нельзя (((

Перепробовал все что удалось нагулить, результат нулевой. Как решить вопрос?

Ссылка на комментарий

Рекомендуемые сообщения

  • 0

Использовать модель данных и все подсчеты вести на основании модели.

ListView используйте только, как представление Ваших данных и не храните в нем ничего!

Ссылка на комментарий
  • 0
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; сделать, но для наглядности я сделал именно так.

Изменено пользователем Евгений Корепов
Ссылка на комментарий
  • 0
40 минут назад, qz5 сказал:

 


ASum:=ASum + AItem.Data['Cost'].AsCurrency;

Наверное будет работать и так в одну строку: TListViewItem (ListView.Items.Item).Data['Cost'].AsCurrency

Ваш Капитан Очевидность

 

Да, последняя строчка моего сообщения как раз об этом:

Цитата

Вторую процедуру можно было без AItem : TListViewItem; сделать, но для наглядности я сделал именно так.

 

Ссылка на комментарий
  • 0

Нас троке TListViewItem (ListView1.Items.Item).Data['Cost'].AsCurrency вылетает ошибка: Invalid class type cast ((((

где i - переменная цикла перебирающего список

Изменено пользователем Aleks Serov
изменение кода программы
Ссылка на комментарий
  • 0
3 часа назад, Aleks Serov сказал:

Нас троке TListViewItem (ListView1.Items.Item).Data['Cost'].AsCurrency вылетает ошибка: Invalid class type cast ((((

где i - переменная цикла перебирающего список

вероятно потому, что Вы записали Integer, т.е. целое число, а читаете Currency, а это вещественное число

Ссылка на комментарий
  • 0
43 минуты назад, qz5 сказал:

вероятно потому, что Вы записали Integer, т.е. целое число, а читаете Currency, а это вещественное число

Поддерживаю. Пишите :=50.0

 

Ссылка на комментарий
  • 0
5 часов назад, Aleks Serov сказал:

Нас троке TListViewItem (ListView1.Items.Item).Data['Cost'].AsCurrency вылетает ошибка: Invalid class type cast ((((

где i - переменная цикла перебирающего список

И сделайте лучше как я предложил - отдельно преобразование класса, отдельно получение данных. Тут invalid class type  cast скорее ошибка TListViewItem (ListView1.Items.Item), а не AsCurrency.

Вы никак не ускоряете код записывая его одной строкой, но ухудшаете читабельность и усложняете поиск ошибок.

Ссылка на комментарий

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...