"Pre-defined" FDataTableRowHandle or how to expose a dropdown of a datatable row names

When subclassing FDataTableCustomizationLayout from another module, I ultimately ran into a linker error when trying to override the virtual CustomizeHeader and CustomizeChildren methods (case 3 of Unresolved External Symbols) with “DetailsCustomizations” added as a module. But I didn’t try very long, so it may be possible =)

I think there are a few ambiguities in previous answers that would probably have saved people a lot of time, so in case anyone needs to achieve the same this is how I went about it.

  1. Create the custom data table row handle struct. Subclassing FDataTableRowHandle is not ideal as subclassed structs do not appear to be supported by blueprint (inheritance in structs?), so I ended up just copying the implementation from FDataTableRowHandle
  2. Most likely you want to create an editor module (Creating an Editor Module | Unreal Engine Community Wiki), but it may be possible to perform the same RegisterCustomPropertyTypeLayout in your game module.
  3. Create your IPropertyTypeCustomization implementation (this will be used to customize your struct from 1, Customizing Details & Property Type panel - tutorial | Unreal Engine Community Wiki) in your Editor Module, Remember public inheritance or you will get a TSharedRef error in your MakeInstance
  4. This is where you can grab the entire implementation from FDataTableCustomizationLayout.
  5. Register the customization in StartupModule (should be clear from above guide). If you experience linker errors make sure you have UnrealEd and PropertyEditor in your Build.cs

At this point you can test your struct by exposing it in blueprint in your game module and see that the custom data table row handle should behave identically to FDataTableRowHandle, but you now have access to alter it however you like (including specifying and loading a data table asset only exposing the row names)
Hopefully it helps someone =)