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


Автор: jonie 4.5.2009, 22:16
Вопрос заключается в следующем: пусть у нас есть компонент, в методе которого есть SqlConnection. Как сделать ему такой же редактор (в design time в propety grid), как у SqlCommand.Connection ?
Код

    public partial class Component1 : Component
    {
        public Component1()
        {
            InitializeComponent();
        }
        private SqlConnection _activeConnection;
        [Editor("Microsoft.VSDesigner.Data.Design.DbConnectionEditor, Microsoft.VSDesigner, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", "System.Drawing.Design.UITypeEditor, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a")]
        public SqlConnection Connection
        {
            get
            {
                return this._activeConnection;
            }
            set
            {
                _activeConnection = value;
            }
        }

        public Component1(IContainer container)
        {
            container.Add(this);

            InitializeComponent();
        }
    }

почему-то так у меня пустой combobox, хотя выбрать Connection двойным щелчком можно, но это далеко от такого:
http://ipicture.ru/

Автор: -Mikle- 5.5.2009, 08:58
Скачай Reflector и поизучай код стандартных компонентов. В общем, ты на верном пути: нужно указать какой-то атрибут (Editor, AttributeProvider, TypeConverter). Другими словами посмотри атрибуты свойств компонента, у которого реализовано то, что тебе нужно. Эти атрибуты могут быть заданы у самого свойства или у его типа (класса). Отпишись сюда с решением.

Автор: jonie 5.5.2009, 20:08
-Mikle- я знаю что такое рефлектор и умею его применять.
данный код как раз выдран им.

вот так, например оно объявлено в sqlconnectuion:
Код

[Editor("Microsoft.VSDesigner.Data.Design.DbConnectionEditor, Microsoft.VSDesigner, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", "System.Drawing.Design.UITypeEditor, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"), ResDescription("DbCommand_Connection"), DefaultValue((string) null), ResCategory("DataCategory_Data")]
public SqlConnection Connection
...

но: ResCategory и ResDescription являются internal

Автор: -Mikle- 5.5.2009, 22:29
Цитата(jonie @  5.5.2009,  23:08 Найти цитируемый пост)
но: ResCategory и ResDescription являются internal

Ну они не влияют на результат, дело не в них. Действительно странно. Не знаю в чем дело.

Автор: Любитель 5.5.2009, 22:32
Цитата(jonie @  5.5.2009,  20:08 Найти цитируемый пост)
знаю что такое рефлектор и умею его применять.

Хех.. Ну, собственно этим же рефлектором смотрим код самого эдитора, и находим там в методе заполнения списка коннекшенов большой иф:
Код

if (((selector != null) && (context != null)) && ((provider != null) && (context.Instance is IDbCommand)))


Смотрим в конец этого условия... Иными словами - если ты не реализуешь в своём компоненте IDbCommand, то использовать этот редактор (по крайней мере в чистом виде) ты не сможешь.

Автор: Springtime 6.5.2009, 06:19
может поможет или облегчит задачу - 
Код

SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder();

Автор: jonie 7.5.2009, 10:03
Springtime ты написал полную чушь.

Любитель слона-то я и не заметил... спасибо.

Автор: -Mikle- 7.5.2009, 19:55
Цитата(Любитель @  6.5.2009,  01:32 Найти цитируемый пост)
Иными словами - если ты не реализуешь в своём компоненте IDbCommand

Хм... может копи-паст с рефлектора, там-сям подредактировать и получится свой редактор  smile    Не забудь сюда потом код выложить, мы тебя плюсАми наградим  smile 

Автор: Любитель 7.5.2009, 21:09
Во-первых, копипастить придётся много.
Во-вторых, это нарушении лицензии ;)

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