You can use this code as an example of how to create a dynamic generic data type:
public object CreateGeneric(Type generic, Type innerType, params object[] args)
{
Type specificType = generic.MakeGenericType(new Type[] { innerType });
return Activator.CreateInstance(specificType, args);
}
Then call the method with the wanted data type.
In this case I created a list with int.
List<int> list = (List<int>)CreateGeneric(typeof(List<>), typeof(int));
list.Add(2);
list.Add(3);
If you are not too stuck on your own classes, you can look into the class DataTable.
Together with the class DataAdapter it is very easy to extract data form a database and show in a data grid.
This is the more generic approach and will probably save you some work.
DataAdapter Class[
^]