Recent

Author Topic: [SOLVED] Update ListView  (Read 726 times)

Pe3s

  • Hero Member
  • *****
  • Posts: 533
[SOLVED] Update ListView
« on: July 09, 2022, 01:35:09 pm »
Hello, I have written code that updates existing ListView entries. I wonder if I wrote it correctly, can I improve the code?
Code: Pascal  [Select][+][-]
  1. procedure TForm1.BitBtn2Click(Sender: TObject);
  2. var
  3.   ListItem: TListItem;
  4. begin
  5. ListView1.Items.Delete(ListView1.Selected.Index);
  6. ListItem := ListView1.Items.Add;
  7.  ListItem.Caption := Edit1.Text;
  8.  ListItem.SubItems.Add(Edit2.Text);
  9.  ListItem.SubItems.Add(Edit3.Text);
  10.  ListItem.SubItems.Add(Edit4.Text);
  11.  SaveData;              
  12.  
« Last Edit: July 10, 2022, 09:42:49 am by Pe3s »

korba812

  • Sr. Member
  • ****
  • Posts: 396
Re: Update ListView
« Reply #1 on: July 09, 2022, 01:59:45 pm »
You can just update the selected item:
Code: Pascal  [Select][+][-]
  1. procedure TForm1.BitBtn2Click(Sender: TObject);
  2. begin
  3.   if ListView1.Selected <> nil then
  4.     with ListView1.Selected do
  5.     begin
  6.       Caption := Edit1.Text;
  7.       SubItems[0] := Edit2.Text;
  8.       SubItems[1] := Edit3.Text;
  9.       SubItems[2] := Edit4.Text;
  10.     end;
  11. end;

dseligo

  • Hero Member
  • *****
  • Posts: 1222
Re: Update ListView
« Reply #2 on: July 09, 2022, 02:06:57 pm »
One more thing.
Korba812 included it in his code, but he didn't mention it: you have to check if there is something selected or you'll get 'access violation':
Code: Pascal  [Select][+][-]
  1. if ListView1.Selected <> nil then

dseligo

  • Hero Member
  • *****
  • Posts: 1222
Re: Update ListView
« Reply #3 on: July 09, 2022, 02:20:14 pm »
You can just update the selected item:

You should also protect subitems unless you always have 3 subitems:
Code: Pascal  [Select][+][-]
  1. procedure TForm1.BitBtn2Click(Sender: TObject);
  2. begin
  3.   if ListView1.Selected <> nil then
  4.     If ListView1.Selected.SubItems.Count < 3 then begin
  5.       ShowMessage('Less then 3 subitems.');
  6.       Exit;
  7.     end;
  8.     with ListView1.Selected do
  9.     begin
  10.       Caption := Edit1.Text;
  11.       SubItems[0] := Edit2.Text;
  12.       SubItems[1] := Edit3.Text;
  13.       SubItems[2] := Edit4.Text;
  14.     end;
  15. end;

ASerge

  • Hero Member
  • *****
  • Posts: 2246
Re: Update ListView
« Reply #4 on: July 09, 2022, 04:30:05 pm »
Why not use local variables? Safe and fast.
Code: Pascal  [Select][+][-]
  1. procedure TForm1.Button1Click(Sender: TObject);
  2. var
  3.   Selected: TListItem;
  4.   SubItems: TStrings;
  5. begin
  6.   Selected := ListView1.Selected;
  7.   if Selected = nil then
  8.     Exit;
  9.   Selected.Caption := Edit1.Text;
  10.   SubItems := Selected.SubItems;
  11.   SubItems.Clear;
  12.   SubItems.Append(Edit2.Text);
  13.   SubItems.Append(Edit3.Text);
  14.   SubItems.Append(Edit4.Text);
  15. end;

Pe3s

  • Hero Member
  • *****
  • Posts: 533
Re: Update ListView
« Reply #5 on: July 10, 2022, 09:42:17 am »
Thank you  :)

 

TinyPortal © 2005-2018