Модераторы: gambit, Partizan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Привязка своего класса к данным 
:(
    Опции темы
ainis
Дата 26.11.2014, 11:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 15.2.2009

Репутация: нет
Всего: нет



Приветствую уважаемых участников форума.

Создаю свой класс на основе UserControl, создаю в нем новое свойство, пытаюсь привязать его к данным и ничего не получается.

Код описания класса:

Код

public class MyControl : UserControl
  {
    
    public event EventHandler Text1Changed;
    private string _Text1 = "";
    [Bindable(true, BindingDirection.TwoWay)]
    [SettingsBindable(true)]
    public string Text1
    {
      get { return _Text1; }
      set
      {
        _Text1 = value;
        if (Text1Changed != null) Text1Changed(this, new EventArgs());
      }
    }
  }


Код загрузки формы (на форме три текстбокса и одна кнопка) и привязки:

Код

public partial class MainForm : Form
  {
    public MyControl MC;
    public MainForm()
    {

      InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e)
    {//Здесь осуществляем собственно привязку.
      this.MC = new MyControl();
      this.MC.DataBindings.Add(new Binding("Text1", this.textBox1, "Text", false, DataSourceUpdateMode.OnPropertyChanged));
      this.textBox2.DataBindings.Add(new Binding("Text", this.textBox1, "Text", true, DataSourceUpdateMode.OnPropertyChanged));
      this.textBox3.DataBindings.Add(new Binding("Text", this.MC, "Text1", true, DataSourceUpdateMode.OnPropertyChanged));
      int ii = 1;
    }
    private void button1_Click(object sender, EventArgs e)
    {
      this.MC.Text1 = "TEST";
    }
  }


В итоге экземпляр моего класса (MC) не привязывается к текстовому полю textBox1 (свойство IsBinding = false), а поле textBox3 без ошибок привязывается к MC. Т. е. объект MC не получается задать как источник данных.
Интересно, что в некоторых (очень редких) случаях привязка все-таки осуществляется.
В чем здесь проблема?

PM MAIL   Вверх
ainis
Дата 26.11.2014, 13:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 15.2.2009

Репутация: нет
Всего: нет



Решил использовать это решение: http://www.sql.ru/forum/531708/uvyazka-dat...mponent#5361195
PM MAIL   Вверх
ainis
Дата 26.11.2014, 18:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 15.2.2009

Репутация: нет
Всего: нет



Есть класс, который пытаюсь привязать к DataTable. Не получается, Position у BindingSource не меняется.

Код класса:

Код

class InterRepresentation : IBindableComponent, INotifyPropertyChanged
  {
    public event EventHandler DocKChanged;
    public event PropertyChangedEventHandler PropertyChanged;
    private int _DocK = 0;
    [property: BindableAttribute(true, BindingDirection.TwoWay)]
    [property: SettingsBindableAttribute(true)]
    public int DocK
    {
      get { return _DocK; }
      set
      {
        _DocK = value;
        if (DocKChanged != null)
          DocKChanged(this, new EventArgs());
        OnPropertyChanged("DocK");
      }
    }
    protected void OnPropertyChanged(string name)
    {
      PropertyChangedEventHandler handler = PropertyChanged;
      if (handler != null)
      {
        handler(this, new PropertyChangedEventArgs(name));
      }
    }
    #region IBindableComponent Members

    private BindingContext bindingContext;
    private ControlBindingsCollection dataBindings;

    public BindingContext BindingContext
    {
      get
      {
        if (bindingContext == null)
        {
          bindingContext = new BindingContext();
        }
        return bindingContext;
      }
      set
      {
        bindingContext = value;
      }
    }

    public ControlBindingsCollection DataBindings
    {
      get
      {
        if (dataBindings == null)
        {
          dataBindings = new ControlBindingsCollection(this);
        }
        return dataBindings;
      }
    }

    #endregion
    #region IComponent Members

    public event EventHandler Disposed;

    ISite site;

    public ISite Site
    {
      get
      {
        return site;
      }
      set
      {
        site = value;
      }
    }

    #endregion

    #region IDisposable Members

    public void Dispose()
    {
      if (Disposed != null)
        Disposed(this, EventArgs.Empty);
    }

    #endregion

  }



Привязка класса:

Код

 this.InterRep = new InterRepresentation();//this - это форма
---
this.InterRep.DataBindings.Add(new Binding("DocK", RegisteredProcesses, "ProcType"));
 this.textBox2.DataBindings.Add(new Binding("Text", RegisteredProcesses, "ProcType"));//здесь для примера привязываю текстбокс



При перемещении по строкам таблицы (DataTable) RegisteredProcesses (эта таблица привязана к DataGridView) textBox2.Text меняется, а свойство DocK объекта InterRep типа InterRepresentation остается неизменным.
В чем проблема?

Добавлено через 5 минут и 21 секунду
Когда кликаю по заголовкам столбцов DataGridView (сортируя его строки), привязанного к RegisteredProcesses, свойство DocK объекта InterRep меняется.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Разработка Windows Forms | Следующая тема »


 




[ Время генерации скрипта: 0.0672 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.