контрол имеет свойство:
| Код | [Category(propretyCategory2)] [Description("Тип базы данных")] [TypeConverter(typeof(PostTypeConverter))] /// <summary> /// Тип базы данных /// </summary> public string BaseType { get; set; }
|
Значение данного свойства должно выбираться из списка. Сделал так:
| Код | /// <summary> /// TypeConverter для списка типов баз /// </summary> class PostTypeConverter : StringConverter { /// <summary> /// Будем предоставлять выбор из списка /// </summary> public override bool GetStandardValuesSupported( ITypeDescriptorContext context) { return true; }
/// <summary> /// ... и только из списка /// </summary> public override bool GetStandardValuesExclusive( ITypeDescriptorContext context) { // false - можно вводить вручную // true - только выбор из списка return true; }
/// <summary> /// А вот и список /// </summary> public override StandardValuesCollection GetStandardValues( ITypeDescriptorContext context) { // возвращаем список return new StandardValuesCollection(str); } string[] str = { "SQL Server", "Access"}; }
|
работает. Проблема: нужно создать еще одно свойство, значение которого так же требуется выбирать из списка, но... Сам список должен содержать список полей DataTable, которая указана в свойствах контрола. Т.о. я должен создать класс, похожий на PostTypeConverter, но вот как в него передать ссылку... создал класс:
| Код | /// <summary> /// FieldsInt для списка полей таблицы, имеющих тип Int32 /// </summary> class FieldsInt : StringConverter { DataTable tab = new DataTable(); public FieldsInt(DataTable _tab) { tab = _tab; } /// <summary> /// Будем предоставлять выбор из списка /// </summary> public override bool GetStandardValuesSupported( ITypeDescriptorContext context) { return true; }
/// <summary> /// ... и только из списка /// </summary> public override bool GetStandardValuesExclusive( ITypeDescriptorContext context) { // false - можно вводить вручную // true - только выбор из списка return true; }
/// <summary> /// А вот и список /// </summary> public override StandardValuesCollection GetStandardValues( ITypeDescriptorContext context) { // возвращаем список return new StandardValuesCollection(str); }
List<string> str = new List<string>(); private void list() { foreach (DataColumn item in tab.Columns) { if (item.DataType == typeof(int)) str.Add(item.ColumnName); } } }
|
Но...
| Код | /// <summary> /// Столбец первичного ключа /// </summary> public string PrimaryKeyFieldName { get; set; } [Category(propretyCategory1)] [Description("Имя поля внешнего ключа. Само поле должно быть типа Int32")] [TypeConverter(typeof(FieldsInt))] /// <summary> /// Столбец внешнего ключа /// </summary> public string ForeignKeyFieldName { get; set; }
|
не то, конечно, ведь я не смог передать параметр, в котором указываю DataTable. Может я вообще не в ту сторону копаю? Как решить праблу? |