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

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

Код: 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
28.11.2003, 12:39
    #32337650
Полуэкт
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DataBinding в своём контроле Версия Полуэкта :)
убрал текстбокс - рез-тат тот же. т.е. разница с работающим контролом - только привязка - там по value а у меня по text...
...
Рейтинг: 0 / 0
28.11.2003, 13:07
    #32337702
Полуэкт
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DataBinding в своём контроле Версия Полуэкта :)
восьмой раз на те же грабли :))


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

в первом случае у тебя 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
03.12.2003, 13:53
    #32342028
Полуэкт
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DataBinding в своём контроле Версия Полуэкта :)
напишу книгу и назову ее Кузина Энциклопедия ;)

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


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