Итак, создадим новый проект по типу Windows Forms и добавим в него эти модели. После этого также добавим через NuGet пакет Entity Framework и следующий класс контекста данных:
1 2 3 4 5 6 7 8 9 10 |
using System.Data.Entity; ........................ class SoccerContext : DbContext { public SoccerContext() : base("SoccerDB2") { } public DbSet<Team> Teams { get; set; } public DbSet<Player> Players { get; set; } } |
И определим модели:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
public class Team { public int Id { get; set; } public string Name { get; set; } public string Coach { get; set; } public virtual ICollection<Player> Players { get; set; } public Team() { Players = new List<Player>(); } } public class Player { public int Id { get; set; } public string Name { get; set; } public int Age { get; set; } public virtual ICollection<Team> Teams { get; set; } public Player() { Teams = new List<Team>(); } } |
Теперь само приложение. На главной форме у нас будет в таблице выводиться список игроков:
Основной функционал будет таким же, как и в прошлой теме: один элемент DataGridView и четыре кнопки. Кроме того нам потребуется две дополнительные формы: одна для создания команды, а другая – для создания/редактирования игрока.
Добавим в проект новую форму. Назовем ее, к примеру, PlayerForm:
Здесь текстовое поле для указания имени, поле NumericUpDown для возраста и элемент ListBox, в котором будут выводиться команды. Установим у этих элементов значение свойства Modifier равным Protected Internal
.
Также есть две кнопки. Установим у кнопки ‘ОК’ значение свойства DialogResult равным OK
, а у кнопки ‘Отмена’ – равным Cancel
.
Форма для добавления команд, назовем ее TeamForm, будет выглядеть следующим образом:
Произведем у этой формы ту же настройку с полями и кнопками, как и у предыдущей формы.
Теперь изменим код главной формы, которая отображает игроков, на следующий:
Код формы команд:
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 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 |
using System.Data.Entity; public partial class Form1 : Form { SoccerContext db; public Form1() { InitializeComponent(); db = new SoccerContext(); db.Players.Load(); dataGridView1.DataSource = db.Players.Local.ToBindingList(); } private void button1_Click(object sender, EventArgs e) { PlayerForm plForm = new PlayerForm(); // добавляем список команд на форму plForm List<Team> teams = db.Teams.ToList(); plForm.listBox1.DataSource = teams; plForm.listBox1.ValueMember = "Id"; plForm.listBox1.DisplayMember = "Name"; DialogResult result = plForm.ShowDialog(this); if (result == DialogResult.Cancel) return; Player player = new Player(); player.Age = (int)plForm.numericUpDown1.Value; player.Name = plForm.textBox1.Text; teams.Clear(); // очищаем список и заново заполняем его выделенными элементами foreach (var item in plForm.listBox1.SelectedItems) { teams.Add((Team)item); } player.Teams = teams; db.Players.Add(player); db.SaveChanges(); MessageBox.Show("Новый игрок добавлен"); } // редактирование private void button2_Click(object sender, EventArgs e) { if (dataGridView1.SelectedRows.Count < 1) return; int index = dataGridView1.SelectedRows[0].Index; int id = 0; bool converted = Int32.TryParse(dataGridView1[0, index].Value.ToString(), out id); if (converted == false) return; Player player = db.Players.Find(id); PlayerForm plForm = new PlayerForm(); plForm.numericUpDown1.Value = player.Age; plForm.textBox1.Text = player.Name; // получаем список команд List<Team> teams = db.Teams.ToList(); plForm.listBox1.DataSource = teams; plForm.listBox1.ValueMember = "Id"; plForm.listBox1.DisplayMember = "Name"; foreach(Team t in player.Teams) plForm.listBox1.SelectedItem = t; DialogResult result = plForm.ShowDialog(this); if (result == DialogResult.Cancel) return; player.Age = (int)plForm.numericUpDown1.Value; player.Name = plForm.textBox1.Text; // проверяем наличие команд у игрока foreach (var team in teams) { if (plForm.listBox1.SelectedItems.Contains(team)) { if (!player.Teams.Contains(team)) player.Teams.Add(team); } else { if (player.Teams.Contains(team)) player.Teams.Remove(team); } } db.Entry(player).State = EntityState.Modified; db.SaveChanges(); MessageBox.Show("Информация обновлена"); } // удаление private void button3_Click(object sender, EventArgs e) { if (dataGridView1.SelectedRows.Count < 1) return; int index = dataGridView1.SelectedRows[0].Index; int id = 0; bool converted = Int32.TryParse(dataGridView1[0, index].Value.ToString(), out id); if (converted == false) return; Player player = db.Players.Find(id); db.Players.Remove(player); db.SaveChanges(); MessageBox.Show("Футболист удален"); } // добавление новой команды private void button4_Click(object sender, EventArgs e) { TeamForm tmForm = new TeamForm(); DialogResult result = tmForm.ShowDialog(this); if (result == DialogResult.Cancel) return; Team team = new Team(); team.Name = tmForm.textBox1.Text; team.Coach = tmForm.textBox2.Text; team.Players = new List<Player>(); db.Teams.Add(team); db.SaveChanges(); MessageBox.Show("Новая команда добавлена"); } } |