powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / ConcurrentDictionary как DataSource для UI DataGrid
6 сообщений из 6, страница 1 из 1
ConcurrentDictionary как DataSource для UI DataGrid
    #39836604
Кифирчик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем привет!

Есть свой класс "быстрого потокобезопасного списка"
Код: c#
1.
2.
3.
4.
class MyList: ConcurrentDictionary<Guid, MyItem>, INotifyCollectionChanged
{
...
}



ConcurrentDictionary + INotifyCollectionChanged - нужна для работы внутренней логики, ну там много потоков, один "список", блокировки, быстрый поиск записи по Guid.

Хочется чтоб этот список можно было использовать как источник данных для UI DataGrid, в том числе чтоб изменения оперативно отображались в UI и чтоб на каждый чих не вызывать - dataGridView1.DataSource = myList

Проблема что MyList не работает как хотелось бы
Отображается одна строка - Count/IsEmpty/Keys/Values

Что нужно сделать чтоб, к примеру dataGridView1 видел его как ObservableCollection<MyItem>?
чтоб данными для таблицы рассматривались Value словаря.
какие интерфейсы реализовать? IBindingList? ICollection? IEnumerable? ...?

или как-то по другому класс организовать?

Код: c#
1.
2.
3.
4.
5.
class MyList: ObservableCollection<MyItem>
{
    private ConcurrentDictionary<Guid, MyItem> _dict...
...
}


Но как в этом варианте сделать чтоб снаружи списком виделось Value словаря?

Какие будут мнения?
...
Рейтинг: 0 / 0
ConcurrentDictionary как DataSource для UI DataGrid
    #39836612
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кифирчик,

может
dataGridView1.DataSource = myList.Values хотя бы?
...
Рейтинг: 0 / 0
ConcurrentDictionary как DataSource для UI DataGrid
    #39836647
Кифирчик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRos,
Values is ICollection
и когда я меняю данные в словаре не хватает INotifyCollectionChanged чтоб UI Grid об этом узнал и обновился

нужно после обновления данных постоянно дергать
dataGridView1.DataSource = myList.Values
...
Рейтинг: 0 / 0
ConcurrentDictionary как DataSource для UI DataGrid
    #39836931
Фотография pation
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кифирчик,

например так, ну и реализация нужна
Код: c#
1.
class MyList: ConcurrentDictionary<Guid, MyItem>, INotifyCollectionChanged, IBindingListView
...
Рейтинг: 0 / 0
ConcurrentDictionary как DataSource для UI DataGrid
    #39836935
Фотография pation
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кифирчик,

второй вариант , наследовать наоборот от ObservableCollection
а быстрый поиск сделать внутри
...
Рейтинг: 0 / 0
ConcurrentDictionary как DataSource для UI DataGrid
    #39837138
Кифирчик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pation, спасибо за наводки )

в общем наиболее простым вариантом оказалось наследоваться от BindingList<MyItem>, Dictionary спрятал внутри
в таком варианте UI грид обновляется при изменении количества строк.
но оставался вопрос с тем что грид не реагировал на изменения отдельных полей, на PropertyChanged никто не подписывался.
как решение - при добавлении в коллекцию элемента я подписываюсь на его PropertyChanged и пробрасываю событие "наружу" списка,
в коде UI контрола подписываюсь на него и вызываю Refresh у грида.
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / ConcurrentDictionary как DataSource для UI DataGrid
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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