Currently your subform is doing a query based on a link field (master/child). As long as that is the case, you can only show one item below.
You can fix this pretty easily, by breaking that connection and giving it something else to connect to.
1) First, back up your database and do this entire modification in a test copy. First rule is back up early and often.
2) Create a table called tblSelected with one field, SelID, which is a number field, not a key, not an autonumber. This table will hold the keys of any items that have been selected. Manually enter any two or three keys for items that are on your inventory, to use for testing.
3) Copy the query that you were using as the recordsource for the subform. (Save the old query.) On the very end, add the words WHERE [ID] = [tblSelected].[SelID]. This assumes there is no WHERE clause there yet, and that the key of the inventory table is called ID. If there is a WHERE clause, use AND instead of where. If the key of the inventory is different from ID, use the name of the key field.
4) From the main form, in design view, click the very top left corner of the subform. Two little squares should darken, showing that you have activated the subform control on the main form. Over in the properties pane, on the data tab, change the Source Object to the new query name, and clear the link master fields and link child fields.
5) Switch to form view. You should see the two or three items that you manually added. This is the time to debug that connection.
6) When it's working, back up the database again and proceed.
7) In the afterupdate event of the dropdown box, you will add code that inserts a record into tblSelected using the key of the item selected. In the properties pane, Events tab, click the After update event, click the three dots, select code builder, and add these lines in the empty subroutine that comes up. Replace ****lstboxname**** with the name of your dropdownbox:
Code:
Dim strSQL As String
strSQL = "INSERT INTO tblSelected ( [SelID]) VALUES ( " & ****lstboxname****.Column(0) & " );"
' msgbox strSQL
CurrentDB.Execute
8) Switch to form view and test the dropdownbox by picking a few items to add. Verify that they appear in the subform. Currently we haven't done anything to stop it from adding twice, but that's a nit at the moment. If it doesn't work, uncomment the msgbox line and make sure that the message box ends in something that looks like something that "VALUES ( 5 );" where 5 is teh key to the item you are selecting. If not, then I have the syntax wrong, so fix it. try removing the .Column(0) off the end and see if that fixes it. If not, google to find out the correct properties of a listbox/combobox, or post the exact symptoms here and someone will figure it out with you.
9) When it's working, back up the database again and proceed.
10) Add a button "Clear Selections" to the form that will delete everything from tblSelected. In the properties pane, Events tab, click the On Click event, click the three dots, select code builder, and add these three lines in the empty subroutine that comes up:
Code:
Dim strSQL As String
strSQl = "DELETE * FROM tblSelected;"
CurrentDB.Execute
That code should work straight off.
11) When it's working, back up the database again and proceed.
You now have the ability to select multiple items, to display them in the subreport, to clear the selections.
You can also use the tblSelected in order to run your other reports and calculations, and to mark items as sold when you finalize the sale.
If you want, you could add a line of code or two to the code in number 7 above to test whether the same item had already been added to tblSelected, but that's a nit.