Сделай что-нибудь подобное.
Type type = typeof(Repository<MessageCategory);
string assemblyQualifiedName = type.AssemblyQualifiedName;
получить значение assemblyQualifiedName и вставить его в поле TypeName. Обратите внимание, что Type.GetType (string), передаваемое значение должно быть
Завершенное сборкой имя типа для получения. См. AssemblyQualifiedName . Если тип находится в текущей выполняющейся сборке или в Mscorlib.dll, достаточно указать имя типа, соответствующее его пространству имен.
Таким образом, он может работать, передавая эту строку в вашем коде, потому что этот класс находится в текущей исполняемой сборке (где вы ее вызываете), где как ObjectDataSource нет.
Скорее всего, вы ищете это
MyProject.Repository`1[MyProject.MessageCategory, DataAccess, Version=1.0.0.0, Culture=neutral, PublicKey=null], DataAccess, Version=1.0.0.0, Culture=neutral, PublicKey=null