[Last Call] Learn how to a build a cloud-first strategyRegister Now

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 2743
  • Last Modified:

Get (ID) field from Listview Clicked Item

Im useing Delphi XE4. Im using an sqLite database(IOS APP).

I have a listView (lvCustomers) i use a sqlDatsaSet to display all the records from the Customers table. I just drag and drop from the Data Explorer, and use Live Bindings to link to the listview(lvCustomers) from the sqlDatsSet.

I want to click on the customers name in the listview(lvCustomers) and get the ID field from the customers table .

I will use this ID to join to the invoice table in the next listvew to display all invoices that belong to the customer ID that i click on (lvCustomer)

How can I get the field Id (Customers.ID) from the item that is clicked on in the listview(lvCustomers)?

It seems TListViewItem has a Tag property. Is it possible to use this with the live binder or without the live binder to grab the ID field ?
0
Grant1842
Asked:
Grant1842
3 Solutions
 
Sinisa VukCommented:
Tag can be used but if you load dataset on your own.
Try to get id field with plain old:
  sqlDatsaSet.FiledByName('IDField').AsInteger
Positioning on LV will make scroll in dataset thought. Try to join table on dataset level.
0
 
rotem156Commented:
You're welcome.
0
 
House_of_DexterCommented:
I don't have XE4...so I can't help you there...I wouldn't get caught up on the new properties...

You want to figure out how they handle SubItems...You use the SubItem to attach your ID value to it and then grab it on the click event...If you can't figure that out...Then create a StringList that coincides with your ListViewItems...and match Names from each list...and then take the ID value from the StringList...

ie. FList[0] = lvCustomers.Items.Items[0].Detail

As you add the Items to your ListView...add the same values to your FList...like
//coded without a compiler...so I make no guarantees ;)


procedure TForm1.AddRecords(aDataSet: TDataset);
var
  a_Index: integer;
begin
//check to make sure the Dataset values line up with the TListViewItems..
//this is not a method I like...but if you can't figure out how to add a SubItem...It might be your only way
  aDataSet.First;
  while not  aDataSet.Eof do
  begin
    AddRecord(aDataSet.FieldByName('Name').AsString,    (aDataSet.FieldByName('Name').AsInteger);
     aDataSet.Next;
  end;
end;

procedure TForm1.AddRecord(aName: string; aId: integer);
begin  
  FList.AddObject(aName, pointer(aID));//use this method if you can't figure out how to add subitems...  
end;

function TForm1.GetID(aName: string): integer;
var
  a_Index: integer;
begin
  Result := 0;
  for a_Index := 0 to FList.Count -1 do
  begin
     if aName = FList[a_Index] then
     begin
        Result := integer(FList.Objects[a_Index]);
        break;
      end;
  end;
end;

Open in new window

0

Featured Post

[Webinar] Cloud and Mobile-First Strategy

Maybe you’ve fully adopted the cloud since the beginning. Or maybe you started with on-prem resources but are pursuing a “cloud and mobile first” strategy. Getting to that end state has its challenges. Discover how to build out a 100% cloud and mobile IT strategy in this webinar.

Tackle projects and never again get stuck behind a technical roadblock.
Join Now