what you have in the picture seem to be on the right track; you just have to make sur that the raw data that the suer enters is as complete as possible and make sure the data flows (is saved) in the right tables with the correct linkages (primary and foreign keys).
as to your last question, the basic idea is as follows (the actual code/mechanics may not be correct and you will have to determine the actual correct syntax):
each grid/table/query should have a primary key associated with the data.
Grid 1 Grid 2
key1 value key2 fkey value <--- source table/query
1 A 1 2 Blue
2 B 2 4 Green
3 C 3 3 Yellow <-- this is a an example record that would be displayed in the Grid 2
4 D 4 2 Red based on the selection of "C" from Grid 1. Other rows are shown
5 E 5 4 Cyan as examples of other possibilities that will not be included.
so that when the user select a row from Grid 1, say "C", then the key (or index) can be found, i.e. 3 and then using this key, we looks this up in the other Grid (2) using this key as the foreign key (fkey) to get the key/index of this data.
so after a selection ("C") is made in Grid 1, we have key1 = 3; Grid 2 data is dynamically generated using a query similar to:
select * from Table 2 where fkey = 3
I have used only simple Tables above as an illustration, but the data can come from other queries as well, however in a normalised database where each type of data (e.g. patient, results, test, etc.) should be in it's own table and if it is required elsewhere then it is referenced by it's table and key (like we were discussing in the above earlier posts).