Привет всем! Сегодня я покажу как связать две таблицы из БД имеющие общую связь один ко многим. Пример приведу достаточно простой, так как он не будет нам усложнять принцип понимание.
Но начнем все по порядку, по пунктам в начале создаем БД в VS в своем проекте. Далее нам необходимо создать таблицы, либо использовать мой готовый скрипт.
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 |
USE [TestDB2] GO /****** Object: Table [dbo].[Пол] Script Date: 12.11.2019 15:57:00 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE TABLE [dbo].[Пол]( [ID_Пола] [int] IDENTITY(1,1) NOT NULL, [Пол] [nvarchar](50) NOT NULL, CONSTRAINT [PK_Пол] PRIMARY KEY CLUSTERED ( [ID_Пола] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] GO /****** Object: Table [dbo].[Человек] Script Date: 12.11.2019 15:57:00 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE TABLE [dbo].[Человек]( [ID_Человека] [int] IDENTITY(1,1) NOT NULL, [Имя] [nvarchar](50) NOT NULL, [Пол] [int] NOT NULL, CONSTRAINT [PK_Человек] PRIMARY KEY CLUSTERED ( [ID_Человека] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] GO ALTER TABLE [dbo].[Человек] WITH CHECK ADD CONSTRAINT [FK_Человек_Пол] FOREIGN KEY([Пол]) REFERENCES [dbo].[Пол] ([ID_Пола]) GO ALTER TABLE [dbo].[Человек] CHECK CONSTRAINT [FK_Человек_Пол] GO |
Теперь добавим DataSet и перетащить на форму две таблицы, выглядеть будет как на рисунке сверху. VS с генерирует код. И у нас появятся адаптеры в компонентах, нам так же необходимо их переместить на форму. А на самой форме расположить два DataGridView
Следующим шаг будет связывание данных БД с DataGridView. Для этого выбираем наш DataGridView нажатием мыши и в правом верхнем углу жмем стрелочку. Открывается список источников данных, выбираем наш проект и ищем DataSet тот что мы создали, раскрываем его и выбираем первую таблицу «Пол».
Теперь осталось связать вторую таблицу с данными первой таблицы.
Для этого выбираем не таблицу, а связь с таблицей, как показано на рисунке выше. Создаем событие Form Load и помещаем следующий код:
1 2 3 4 5 |
private void Form1_Load(object sender, EventArgs e) { полTableAdapter1.Fill(this.dataSet1.Пол); человекTableAdapter1.Fill(this.dataSet1.Человек); } |
На этом все, теперь мы можем выбирать из таблице Пол, мужской и в таблице человек сразу отобразятся все мужчины, аналогично и с женским полом. И вот что у нас получилось:
А вот что бы скрыть поля ID_Пола и ID_Человека в DataGridView мы в коде можем добавить следующие строки:
1 2 3 4 5 6 7 8 |
private void Form1_Load(object sender, EventArgs e) { полTableAdapter1.Fill(this.dataSet1.Пол); человекTableAdapter1.Fill(this.dataSet1.Человек); dataGridView1.Columns[0].Visible = false; dataGridView2.Columns[0].Visible = false; dataGridView2.Columns[2].Visible = false; } |
Спасибо всем, если кому помог разобраться с связыванием таблиц.