Известно, что DataSet
может хранить пользовательские типы данных в таблицах. Для нетипизированного DataSet
, т.е. экземпляра класса DataSet
, достаточно, чтобы нужные типы данных были видны из того места кода, в котором будем проводить операции с DataSet
. Например, сделаем тестовый enum
:
public enum testenum { val0=0, val1=1 }
и подключим какое-нибудь дополнительное пространство имен, например:
using System.Diagnostics;
Теперь, в таблицу DataSet
можно добавить поля типов testenum
и, например, ProcessWindowStyle
(из System.Diagnostics
)
//...
DataSet dsTest = new DataSet();
//...
dsTest.Tables.Add("Test");
dsTest.Tables["Test"].Columns.Add("Text", typeof(string));
dsTest.Tables["Test"].Columns.Add("Enum", typeof(testenum));
dsTest.Tables["Test"].Columns.Add("Enum2", typeof(ProcessWindowStyle));
Если же делать типизированный DataSet
, т.е. добавить в проект DataSet
, как отдельный класс (наследник обычного DataSet
), и создать нужные таблицы в конструкторе (Dataset Designer), то при попытке просто прописать пользовательский тип DataType
в конструкторе, получится ошибка:
На самом деле, имена типов данных нужно вводить полностью, вместе с их пространствами имен. Т.е., при условии, что пространство имен программы, например tmpDataSet
, то тип testenum
нужно указывать как tmpDataSet.testenum
(а тип ProcessWindowStyle
, соответственно, как System.Diagnostics.ProcessWindowStyle
)
Вещь, вроде бы довольно очевидная, если приглядеться (стандартные типы из списка прописываются точно также):
Но почему-то прямо нигде не озвученная, что странно.