powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / DataBinding в своём контроле Версия Полуэкта :)
5 сообщений из 5, страница 1 из 1
DataBinding в своём контроле Версия Полуэкта :)
    #32337630
Полуэкт
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет всем..

имеем юзер контрол с простым комбобоксом
и там проперти

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
public long Value 
{
	get 
	{
		return Convert.ToInt64(this.cmbCountry.Value);
	}
	set 
	{
		if (value !=  0 ) this.cmbCountry.Value = value;
	}
}


привязываем это:
Код: plaintext
this.usrCountry1.DataBindings.Add    ( "Value" , salesDS.CorpSales,  "addressCountry" );


все работает. сделал я на горе свой другой контрол там текстбокс и комбобокс - я их переключаю поочереди в зависимости от типа данных которые они извлекают (т.е. сам контрол инициализируется при создании некоторыми данными из базы рид-онли и он виден потом всю дорогу как текст или как комбобокс). но привязку контрола приходится делать по так:

Код: plaintext
this.usrUserFields1.DataBindings.Add	( "Text" , salesDS.CorpUserValuesPivot,  "value1" );


проперти описан так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
public override string Text 
{
	get 
	{
		if (this.cmbUserField.Visible)
			return this.cmbUserField.SelectedItem.DisplayText;
		else
			return this.txtUserField.Text;
	}
	set // for binding by Text
	{
		if (this.cmbUserField.Visible)
		{
			int i =  0 ;
			foreach(Infragistics.Win.ValueListItem myItem in this.cmbUserField.Items)
			{
				if (myItem.DisplayText == value)
					break;
				i++;
			}
			if (i > cmbUserField.Items.Count -  1  || i ==  0 ) i = - 1 ; // deselect all
			this.cmbUserField.SelectedIndex = i;
		}
		else
			this.txtUserField.Text = value;
	}
}


все работает хорошо в одну сторону. т.е. данные в контроле выставляются из базы хорошо и в текстбоксе и в комбобоксе. но обратно в базу они не попадают. get для проперти Text не вызывается никогда (хотя в прототипе get для value вызывается)... я почитал про карренси манагера опять но у меня тут плоское значение и опять же контрол-прототип работает отлично без имплемента ивентов и карренси манагеров и пр.....

может есть какое то простое объяснение??
...
Рейтинг: 0 / 0
DataBinding в своём контроле Версия Полуэкта :)
    #32337650
Полуэкт
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
убрал текстбокс - рез-тат тот же. т.е. разница с работающим контролом - только привязка - там по value а у меня по text...
...
Рейтинг: 0 / 0
DataBinding в своём контроле Версия Полуэкта :)
    #32337702
Полуэкт
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
восьмой раз на те же грабли :))


ответ на этот дурацкий вопрос - BeginEdit - EndEdit
...
Рейтинг: 0 / 0
DataBinding в своём контроле Версия Полуэкта :)
    #32337807
кузя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
точно. а вот автоматная схема

в первом случае у тебя PropertyDescriptor однозначно завязан на единственное свойство др. контрола и все изменения этого свойства ловились Binding'ом. во втором немного сложнее (читай геморройнее) - чтобы binding мог подписаться на события изменения тебе самостоятельно придется вызывать метод SetValue.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
set
{
  if(this.Text==value) return; // эта строка - дабы избежать бесконечной рекурсии
  if(this.cmbUserField.Visible) 
  {
   ...
  }
  // а эта строка вызовет событие по изменению свойства Text + 
  // еще раз занесет значение - для этого и нужно избегать рекурсии (еще раз вызов set)
  TypeDescriptor.GetProperties(this)[ "Text" ].SetValue(this, value);
}
PS Binding подписывается на изменения через AddValueChanged от PropertyDescriptor, естественно всё через reflection в runtime
...
Рейтинг: 0 / 0
DataBinding в своём контроле Версия Полуэкта :)
    #32342028
Полуэкт
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
напишу книгу и назову ее Кузина Энциклопедия ;)

где ты это все вычитываешь? рефлекшн конечно понятно. но вот про дескриптор я впервые слышу а про поведение его при подписке на ивенты тем более... может книжку какую почитать?
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / DataBinding в своём контроле Версия Полуэкта :)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]