Гость
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Проблема: Изменение в коллекции BindingListView не вызывает ListChanged. / 1 сообщений из 1, страница 1 из 1
22.07.2011, 16:13
    #37363385
kaskiev
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема: Изменение в коллекции BindingListView не вызывает ListChanged.
Связался со сторонней коллекцией для привязки данных BindingListView. Сайт blw.sourceforge.net . Это довольно популярная коллекция позволяет фильтровать и привязывать дынные в контроле.

Вот упрощенный кусок кода С++\CLI (почти C#). Коротко: при использовании в качестве данных привязки стандартной коллекции BindingList всё работает Ок и при изменении свойства элемента коллекции (прикладной объект) событие ListChanged вызывается (комментарий 1), а при использовании BindingListView - не вызывается (комментарий 2).
В чём проблема?

Код: 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.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
// Прикладной объект. Элемент моей прикладной коллекции. 
public ref class RuleItem
{
public: virtual event EventHandler^ NameChanged;

private: String^ m_Name;
public:
	property System::String^ Name
	{
		System::String^ get() 
		{ 
			return m_Name;
		};
		void set(System::String^ value)
		{
			m_Name = value;
                        this->NameChanged(this, (gcnew System::EventArgs()));
		}
	}
};

// Инициализации коллекции, контролов, внесение изменение в прикладном объекте. 
System::Void  Form1::Form1_Load(System::Object^  sender, System::EventArgs^  e) 
{
	List<RuleItem^>^ rules = gcnew List<RuleItem^> ();
		
	RuleItem^ rule;
	rule = gcnew RuleItem();
	rule->Name = "A33";
	rules->Add(rule);	

	rule = gcnew RuleItem();
	rule->Name = "A11";
	rules->Add(rule);				 

   // 1.
  // Когда привязали BindingList, то отрабатывается событие bsRules_ListChanged.
  bsRules->DataSource = gcnew BindingList<RuleItem^>(rules);
  RuleItem^ currentItem = (RuleItem^)bsRules->Current;
  // Изменение элемента коллекции. При этом должно вызваться событие bsRules_ListChanged.
  // Событие bsRules_ListChanged не вызывается при использовании BindingListView.
  currentItem->Name = "Test";

  /*
  // 2.
  // Когда привязали BindingListView, то событие bsRules_ListChanged не вызывается.
	bsRules->DataSource = gcnew BindingListView<RuleItem^>(rules);
   RuleItem^ currentItem = ((ObjectView<RuleItem^>^)bsRules->Current)->Object;
  // Изменение элемента коллекции. При этом должно вызваться событие bsRules_ListChanged.
  // Событие bsRules_ListChanged не вызывается при использовании BindingListView.
  currentItem->Name = "Test";
  */
}

Почитав Брайана Нойеса "Привязка данных" и поковырявшись с BindingListView пришел к выводу, что для достаточно простых случае лучше использовать DataSet, который "из коробки" позволяет фильтровать.
...
Рейтинг: 0 / 0
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Проблема: Изменение в коллекции BindingListView не вызывает ListChanged. / 1 сообщений из 1, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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