If you show an associated object type it is correcy behaviour that it shows all possible objects, the default is to show everything because it is easier to show less than to show more ;-)
You can put an xpath constraint on your search parameter, here are some examples
Show all types that are associated through product data with the group in your dataview
[MyFirstModule.Main_sub/MyFirstModule.ProductData/MyFirstModule.Main_Group='[%CurrentObject%]']
or
Show all types that are associated through any productdata object with any ProductGroup object
[MyFirstModule.Main_sub/MyFirstModule.ProductData/MyFirstModule.Main_Group/MyFirstModule.ProductGroup]
or
Show all producttypes that are associated through any product data object with any productgroup with a group code that has a specific value or status
[MyFirstModule.Main_sub/MyFirstModule.ProductData/MyFirstModule.Main_Group/MyFirstModule.ProductGroup[contains(GroupProductGroup, 'A')]]
Trying to understand the question:
you searchbutton accesses the Producttype and it shows ALL producttype, not just the ones associated with the Productdata
so you have ProductGroup > ProductData > ProductType
And you Form is based off ?? ProductGroup ??
Maybe you can add part of the Domainmodel and a screenprint ? Other then that I would guess that your association is set wrong, or is not yet activated? and you should define a contraint
This holds for input fields in dataviews, columns in datagrids, and searchfields in datagrids.
As i understood, this means that you can search for objects being associated to the you object selected in the search field, and NOT that the available search values themselves are constrained by those associations.
(but I am not completely sure whether i understand your question correctly)