LocalDB C# некорректно отображает данные при редактировании
Создаю простое приложение при помощи средств конструктора(программного кода минимум, осваиваю среду). Задача приложения это: Вывести данные из базы LocalDB(с учётом внешнего ключа) на одной вкладке tabControl, а так же позволить их редактировать на второй.
Создаю проект с tabControl
Создаю базу данных путём Проект > Добавить > Создать элемент
Добавляю таблицы:
CREATE TABLE [dbo].[sotrud] ( [id] INT NOT NULL PRIMARY KEY, [surname] NVARCHAR(50) NULL, [name] NVARCHAR(50) NULL, [otch] NVARCHAR(50) NULL, [dolj] NVARCHAR(50) NULL )
А так же таблицу с внешним ключом.
CREATE TABLE [dbo].[opisanie]
(
[id] INT NOT NULL PRIMARY KEY,
[vozrast] NVARCHAR(50) NULL,
[staj] NVARCHAR(50) NULL,
[id_sotrud] INT NULL,
CONSTRAINT [FK_Table_Tosotrud] FOREIGN KEY ([id_sotrud]) REFERENCES [sotrud]([id])
)
Подключаю базу данных как новый источник данных и разворачиваю её на вкладке "Data Source"
Переношу таблицу на форму в виде DataGridView
- Меняю в выпадающем окне таблиц параметр "DataGridView" на "Сведения" и так же перетаскиваю их на форму но уже на вторую вкладку tabControl. При этом компонент BindingNavigator автоматически не создаётся, поэтому я дважды копирую его с первой вкладки
- Меняю свойство BindingSource для компонентов BindingNavigator в соответствии с таблицами
- Открываю конструктор баз данных и меняю свойства полей "id" во всех таблицах на:
Autoincrement - True AutoincrementSeed - 1 AutoincrementStep - 1
В итоге при тестировании программы, первая таблица(Сотрудники) заполняется без нареканий и претензий, а вторая выдаёт просто чудеса.
- Может связать данные совсем не с тем id которое необходимо.
- Может просто не внести данные(возможно потому что id к которому она хотела подключиться не существует)
- В случае если добавить 1 запись и сразу же добавить вторую запись, то первая запись будет нормально отображаться в базе на первой вкладке TabControl.
Подскажите пожалуйста в чем заключается ошибка и как её исправить. Желательно средствами конструктора. Если исправить данную проблему возможно только кодом, то пожалуйста опишите подробно как это сделать, поскольку уровень знаний намного ниже среднего и простой комментарий по типу: "Это ерунда, откомпиль спарси продиспель компонент класса" мне вряд ли поможет. Заранее огромное спасибо!
Ответы (1 шт):
Собственно выходные прошли и со свежей головой решить данную проблему оказалось просто, настолько просто что даже стыдно. Дам ответ, вдруг кому из страдальцев вроде меня пригодится.
При создании таблиц или полей заполнения таблиц с помощью конструктора, среда автоматически создаёт BindingNavigator
в котором помимо стандартных компонентов находится кнопка сохранения/обновления -
И вот в отличии от стандартных элементов она содержит код который возможно отобразить. При копировании BindingNavigator
, для корректной работы требуется не только изменить свойство BindingSource
, но и заполнить кнопку сохранения/обновления() программным кодом аналогичным тому который будет создан автоматически с первой навигационной панелью.
Извиняюсь за заданные глупые вопросы.