Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.221.89.183] |
|
Сообщ.
#1
,
|
|
|
В программе использую следующий код:
dataGridView1.DataSource = context.Items; comboBox1.DataSource = context.Items; comboBox1.DisplayMember = "TB_TypeName"; где public ObjectSet<Item> Items; MyEntities context=new MyEntities (); Но в dataGridView и в comboBoxe не отображаются добавленное Item. Item temp = new Item(); //Заполняю свойства Item context.Items.AddObject(temp); context.SaveChanges(); Добавленное Item отображаются если создаю новый context либо если изменяю DataSource. Скажите пожалуйста в чем причина? |
Сообщ.
#2
,
|
|
|
А почему данные биндятся на context.Items а добавляются к context.Types? Чтобы данные сразу отобразились нужно использовать интерфейс INotifyPropertyChanged. Если используете Entity Model то это будет сделано автоматом. Если же через Code First то нужно обновлять самому.
|
Сообщ.
#3
,
|
|
|
Цитата Craft @ А почему данные биндятся на context.Items а добавляются к context.Types? произошла опечатка (в программе написано правильно) Цитата Если используете Entity Model то это будет сделано автоматом использую Entity Model, но данные автоматически не обновляются в dataGridView, но в context.Items данные добавляются Цитата данные в dataGridView обновляются, если создаю новый context либо если изменяю DataSource |
Сообщ.
#4
,
|
|
|
Покажите пожалуйста реализацию свойства ObjectSet<Item> Items. Наверняка просто не вызывается обновление свойства с помощью PropertyChanged.
|
Сообщ.
#5
,
|
|
|
Цитата Craft @ Items сгенерировал Entity model public ObjectSet<Item> Items { get { if ((_Items == null)) { _Items = base.CreateObjectSet<Item>("Items"); } return _Items; } } private ObjectSet<Item> _Items; |
Сообщ.
#6
,
|
|
|
Попробуйте сделать как написано здесь Попробуйте тоже написать Items.Refresh();. Как то так
dataGridView1.Items.Refresh(); |
Сообщ.
#7
,
|
|
|
Цитата dataGridView1.Items.Refresh(); DataGridView не имеет коллекцию Items. Вот так dataGridView1.DataSource = context.Items.ToList(); все ОК. Просто я не могу понять, когда пишу dataGridView1.DataSource = context.Items; DataSource присваивается ссылка на context.Items. Ни так ли? context.Items.Last() возвращает добавленное Item. Так почему же dataGridView не обновляется автоматически? |
Сообщ.
#8
,
|
|
|
Цитата Так почему же dataGridView не обновляется автоматически? Видимо, потому что нет реализации INotifyCollectionChanged. Проще говоря, коллекция не может уведомлять о том, что она изменилась. Вам нужно либо делать реализацию коллекции с нотификацией о изменениях, либо обновлять вручную. |
Сообщ.
#9
,
|
|
|
Aram А почему вы не используете созданный специально для таких случаев DataGrid? DataGridView не подходит для отображения данных из БД. Лучше взять говотовый компонент который предназанчений именно для этого. Посмотрите например обзор платных гридов и для своего случая можете поскать бесплатные которые приводят в коментарих ниже. Там есть выбор как под WPF так и под WindowsForms.
|