Я изучаю структуру Entity Framework и имею разумное понимание ее операций, однако я сталкиваюсь с некоторыми проблемами при привязке Entities к элементу управления DataGridView в Winforms.Связывание, позволяющее выполнять операции CRUD в DataGridView
Проблема, с которой я столкнулся, заключается в том, что, по-видимому, существует разрыв между объектом данных и элементом управления DataSource
.
я устанавливаю DataSource
в DataGridView с помощью LINQ к Entities (это выполняется в случае загрузки формы):
DbContext context = new DbContext();
FormGrid.DataSource = context.USER_LIST
.Where(x => x.USER_ID > 1)
.ToList()
Это будет означать, скажем, 5 строк в DataGridView; столбцы в DataGridView были добавлены с DataPropertyName
, который соответствует свойству объекта, который я хочу показать в сетке, поскольку в этом случае сетка представляет собой список объектов USER_LIST, но может быть любым видом списка объектов из DbSet<T>
в модели сущности.
При добавлении новой строки в сетке, я сначала создать новый объект user_list со значениями по умолчанию, требуемые из таблицы базы данных «AllowNull = False» столбцов:
USER_LIST NewUser = new USER_LIST() { USER_ID = FGetNextID("USER"), PASSWORD = "p", USER_NAME = "NewUser" };
Однако я впадающей при попытке добавить этот объект: добавление его к данным в новой строке в DataGridView не добавляет его в коллекцию context.USER_LIST
и добавление ее непосредственно в context.USER_LIST
не добавляет новую строку в DataGridView, заставляя меня думать, что я являюсь обязательным данные в DataGridView некорректно.
Я хочу, чтобы создать экземпляр нового объекта Entity Object, а затем добавить его в DbSet, который затем будет отображаться новой строкой, добавляемой в элемент управления DataGridView. Затем, когда любые изменения внесены в любой из других объектов через DataGridView и вызывается context.SaveChanges()
, эти изменения подтверждены.
Вам нужно * привязку двухсторонних данных. * См. Http://stackoverflow.com/q/12736958 –
Это, безусловно, позволяет привязать двухстороннюю привязку данных, но поскольку это возвращает все элементы в USER_LIST как объекты, это не позволяет фильтрация в списке объектов, привязанных к DataSource. Я буду исследовать, как фильтровать DataSource отдельно и отчитываться с тем, что я нахожу, хотя, если у вас есть какие-либо идеи на этом фронте, я открыт для предложений. –
@Robert Harvey. Заглянув в это, выяснилось, что решение было действительно неловко простым; вызов Load() на DbSet будет загружать все обратно, но я не понимал, что могу выполнять инструкции LINQ перед вызовом Load() для достижения тех же результатов; выполнение этого разрешено встретить, чтобы получить исходный набор данных, который не представлял всех записей в таблице, но все же допускает двухстороннюю привязку. –