Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Разработка Windows Forms > Выбор значения свойства из списка, формируемого пр


Автор: Compositum 29.4.2008, 11:34
контрол имеет свойство:

Код

[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. Может я вообще не в ту сторону копаю? Как решить праблу?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)