Форум программистов, компьютерный форум, киберфорум
Наши страницы
C#: Базы данных, ADO.NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
Чипс
13 / 13 / 2
Регистрация: 21.08.2015
Сообщений: 307
1

Я правильно думаю о ObservableCollection ?

12.04.2018, 18:32. Просмотров 746. Ответов 4
Метки нет (Все метки)

Добрый день.
Хочу убедится, что думаю правильно.

Вот есть у меня форма с DataGrid, в котором я хочу разместить данные из двух таблиц, которые находятся в БД, но информация из таблиц мне нужна избирательная, для этого я делаю запрос, а результат запроса размещаю в ObservableCollection которая привязана к DataGrid, правильно?

Получается так, что ObservableCollection является "прослойкой" между БД и DataGrid.

Если это так, то мне надо делать дополнительно модель данных в каталоге "Models" в рамках работы с паттерном "MVVM"?
Ну и назвать её "TableForDataGridOfForm1" ?

Или можно как-то выкрутиться в ViewModel? Не создавая дополнительные модели для DataGrid?
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.04.2018, 18:32
Ответы с готовыми решениями:

Пример использования ObservableCollection?
Прошу помочь разобраться с ObservableCollection. ObservableCollection предоставляет...

Программа-прокси. Думаю над способом реализации.
Вобщем у меня вопрос такой, общего плана. Есть программа-клиент на локальном компьютере и есть...

Почему не получается сериализовать ObservableCollection
Хочу сериализовывать и десериализовывать ObservableCollection. Но почему-то зависает при...

Как сделать update с ObservableCollection
Форумчане не подскажете как изменить объект ObservableCollection и отправить его в бд?

Добавить с другого потока объект в ObservableCollection
Пробовал так, но ошибка Application.Current.Dispatcher.Invoke(new Action(() => ...

4
Usaga
Эксперт .NET
5571 / 3775 / 671
Регистрация: 21.01.2016
Сообщений: 15,000
Завершенные тесты: 2
13.04.2018, 08:27 2
Чипс, что-то как-то всё сумбурно описано. Вы результат запроса (коллекцию объектов) можете или напрямую привязывать к DataGridView или заворачивать во что-нибудь типа ObservableCollection. Класс, который представляет собой выборку из бд, и будет ваше моделькой. И называться она должна по смыслу, а не сценарию использования (с участием всяких Table, Grid и Form).
0
Чипс
13 / 13 / 2
Регистрация: 21.08.2015
Сообщений: 307
13.04.2018, 11:15  [ТС] 3
Цитата Сообщение от Usaga Посмотреть сообщение
как-то всё сумбурно описано
Это потому что мало написано, не хотелось заставлять кого либо читать много, а то ответ можно не получить =)

Тем не менее вы всё поняли и это душу мою согревает.

Цитата Сообщение от Usaga Посмотреть сообщение
можете или напрямую привязывать к DataGridView
А ещё я могу писать код вообще без "try catch" =)

Я хочу понять, это хорошая практика делать прослойку между DataGrid и БД (запросами) в виде ObservableCollection или нет?

Или ObservableCollection используются в конкретных случаях.

Тобишь, если я начну всё подряд запихивать в ObservableCollection, а потом отображать это в DataGrid, а потом приду на собеседование, покажу этот код, а мне скажут, ты чего тут натворил, зачем ты всё так сделал?

C#
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
using System;
using System.Collections.Generic;
using System.Linq;
 
namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            IList<Cat> Cats = new List<Cat>();
 
            Cats.Add(new Cat { Id = 1, Name = "Cat1", Age = 5 });
            Cats.Add(new Cat { Id = 2, Name = "Cat2", Age = 6 });
            Cats.Add(new Cat { Id = 3, Name = "Cat3", Age = 7 });
 
            IList<Dog> Dogs = new List<Dog>();
 
            Dogs.Add(new Dog { Id = 1, Name = "Dog1", Age = 2 });
            Dogs.Add(new Dog { Id = 2, Name = "Dog2", Age = 3 });
            Dogs.Add(new Dog { Id = 3, Name = "Dog3", Age = 4 });
 
            var AnimalsOver3 = from qCats in Cats
                               from qDogs in Dogs
                               where qCats.Age > 3
                               where qDogs.Age > 3
                               select new { qCats.Name, qDogs.Name  };
            //Кстати, как выйти из такой ситуации, когда имена «столбцов» совпадают,
            //в sql можно было переименовать один из них, но тут что-то не могу понять =(
 
            //Delay
            Console.WriteLine();
            Console.WriteLine("Ready!");
            Console.ReadKey();
        }
    }
 
    class Cat
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public int Age { get; set; }
    }
 
    class Dog
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public int Age { get; set; }
    }
}
Вот у меня есть по результатам запроса коллекция AnimalsOver3.
Теперь я желаю вывести её в DataGrid, должен ли я сначала "завернуть" её в ObservableCollection и должна ли быть заранее подготовлена модель AnimalsOver3 или можно обойтись без этого?
0
Usaga
Эксперт .NET
5571 / 3775 / 671
Регистрация: 21.01.2016
Сообщений: 15,000
Завершенные тесты: 2
13.04.2018, 11:24 4
Лучший ответ Сообщение было отмечено Чипс как решение

Решение

ObservableCollection задумывалась как простая коллекция умеющая "извещять" о своём изменения. Оно не имеет отношения ни к базе данных, ни к DataGridView.

Если вам "извещения" не нужны, то и данная коллекция тоже. DataGridView умеет работать и с обычными коллекциями.

Цитата Сообщение от Чипс Посмотреть сообщение
Теперь я желаю вывести её в DataGrid, должен ли я сначала "завернуть" её в ObservableCollection и должна ли быть заранее подготовлена модель AnimalsOver3 или можно обойтись без этого?
В результате выполнения "запроса" вы получаете на руки коллекцию анонимных объектов, которые уже являются моделькой (точнее, DTO-шкой). Можете оставить так, можете завести отдельный класс, чтобы не пользоваться анонимным классом. Последнее предпочтительнее, так как оно более явное и может быть переиспользовано в другом коде.

Цитата Сообщение от Чипс Посмотреть сообщение
Кстати, как выйти из такой ситуации, когда имена «столбцов» совпадают,
C#
1
select new { CatName = qCats.Name, DogName = qDogs.Name  };
Добавлено через 1 минуту
Цитата Сообщение от Чипс Посмотреть сообщение
Я хочу понять, это хорошая практика делать прослойку между DataGrid и БД (запросами) в виде ObservableCollection или нет?
Прослойка должна быть в любой случае. DataGridView (как и любая другая структура в вашей программе) не должен быть в курсе откуда и как были получены данные, что он визуализирует.
1
Чипс
13 / 13 / 2
Регистрация: 21.08.2015
Сообщений: 307
13.04.2018, 13:25  [ТС] 5
Спасибо большое за ответы, я знаю, вопросы были "туповаты", но для меня были важны эти моменты.
0
13.04.2018, 13:25
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.04.2018, 13:25

Правильно ли я думаю?
Лицензионный антивирус защищает компьютер лучше,жду ваших мнений!:friends:

robots - правильно думаю?
Здравствуйте, есть страницы: ...

Надо сделать 3 кнопки, правильно ли думаю..
Задумал вот сделать ерундовинку одну дитю к НГ (счетчик дней до нового года), хочу 3 кнопки (с...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru