powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Проблема: Изменение в коллекции BindingListView не вызывает ListChanged.
1 сообщений из 1, страница 1 из 1
Проблема: Изменение в коллекции BindingListView не вызывает ListChanged.
    #37363385
kaskiev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Связался со сторонней коллекцией для привязки данных 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
1 сообщений из 1, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Проблема: Изменение в коллекции BindingListView не вызывает ListChanged.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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