[video(video-xcdU9b91-1704040286495)(type-csdn)(url-https://live.csdn.net/v/embed/355757)(image-https://video-community.csdnimg.cn/vod-84deb4/a090dd94a7e271eebfde0675b3ed0102/snapshots/8ea7d139d04a45018cee00f5941a4830-00004.jpg?auth_key=4857630234-0-0-fd49d3e2a45ced4ff569beca2381b74b)(title-EF框架演示)]
运行环境 Visual Studio 2019 SQL Server EntityFramework 6.2.0
一、创建项目,编写数据库 创建一个Windows窗体应用(.NET Framework) 添加新项目
创建后再创建下图:
创建SQL数据库,创建表 创建数据库StudyEF,创建表如下: 在这里要强调一点,在创建表的时候一定设置主键,不然创建后的ef框架会有问题。 往表里面添加几条数据,方便进行测试
给项目添加EF实体数据模型 添加一个ADO.NET实体数据模型,我将其命名为EFData,然后进行下面操作 然后就是完成,漫长的等待创建完成
二、DataGridView绑定数据源 下一步,下一步,然后选择连接 下一步,下一步,一直到下图,选中表,点击完成 添加完成后,dgv控件自动显示字段名 这里的表头可以根据需求修改 运行测试,数据显示正常
三、实现添加按钮 编写代码 首先添加一个Add的windows窗体 如图所示: 鼠标双击添加按钮,在添加按钮事件里面开始编写:
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 String username = textBox1.Text; String name = textBox2.Text; String password = textBox3.Text; String age = textBox4.Text; String phone = textBox5.Text; String email = textBox6.Text; String address = textBox7.Text; using (var study = new StudyEFEntities()) { var test = new TestData { password = password, username=username, name=name, age=age, phone=phone, email=email, address=address }; study.TestData.Add(test); study.SaveChanges(); } MessageBox.Show("添加成功" ); Main f1 = (Main)this .Owner; f1.Refresh_Method(); f1.Activate(); this .Hide();
在主页面(原来我写的是Test窗体,但是重新生成解决方案了也没有显示,估计是重名了与其他功能,于是我主界面换成了Main窗体)的添加按钮里面编写new一个窗体,并且写一个让数据刷新的方法,通过owner在添加窗体调用,这样添加完成原来的窗体更新数据。
1 2 3 4 5 6 7 8 9 10 11 private void button1_Click (object sender, EventArgs e ) { Add f1 = new Add(); f1.Owner = this ; f1.Show(); } internal void Refresh_Method () { this .testDataTableAdapter.Fill(this .studyEFDataSet1.TestData); }
运行测试 测试没有问题。
四、实现删除按钮 编写代码 在Main窗体里面,双击删除按钮
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 private void button2_Click (object sender, EventArgs e ) { var dev1 = this .dataGridView1.CurrentRow; using (var study = new StudyEFEntities()) { if (dev1.Cells[0 ].Value != null ) { int idToDelete; if (int .TryParse(dev1.Cells[0 ].Value.ToString(), out idToDelete)) { var ToDelete = study.TestData.FirstOrDefault(u => u.id == idToDelete); if (ToDelete != null ) { study.TestData.Remove(ToDelete); study.SaveChanges(); } } } this .testDataTableAdapter.Fill(this .studyEFDataSet1.TestData); } }
运行测试 测试没有问题,点击删除删除选中数据,并且刷新数据(原理是重新绑定数据)
五、实现修改按钮 编写代码 窗体之间传递参数 因为修改,修改是要有数据显示才能方便,不然就成重写了,在这里我觉得需要做一个参数传递。
Main窗体中修改按钮事件 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 private void button3_Click (object sender, EventArgs e ) { if (this .dataGridView1.SelectedRows.Count > 0 ) { var dev1 = this .dataGridView1.CurrentRow; Update frm = new Update(dev1); frm.Owner = this ; frm.Show(); } else { MessageBox.Show("请先选择一条数据" ); } }
在update窗体中添加参数绑定 1 2 3 4 5 6 7 8 9 10 11 12 public Update (DataGridViewRow dev1 ) { InitializeComponent(); textBox8.Text = dev1.Cells[0 ].Value.ToString(); textBox1.Text = dev1.Cells[1 ].Value.ToString(); textBox2.Text = dev1.Cells[2 ].Value.ToString(); textBox3.Text = dev1.Cells[3 ].Value.ToString(); textBox4.Text = dev1.Cells[4 ].Value.ToString(); textBox5.Text = dev1.Cells[5 ].Value.ToString(); textBox6.Text = dev1.Cells[6 ].Value.ToString(); textBox7.Text = dev1.Cells[7 ].Value.ToString(); }
在update窗体中添加修改按钮代码 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 private void button1_Click (object sender, EventArgs e ) { int id = int .Parse(textBox8.Text); string username = textBox1.Text; string name = textBox2.Text; string password = textBox3.Text; string age = textBox4.Text; string phone = textBox5.Text; string email = textBox6.Text; string address = textBox7.Text; using (var study = new StudyEFEntities()) { var ToUpdate = study.TestData.FirstOrDefault(u => u.id == id); if (ToUpdate != null ) { ToUpdate.username = username; ToUpdate.name = name; ToUpdate.password = password; ToUpdate.age = age; ToUpdate.phone = phone; ToUpdate.email = email; ToUpdate.address = address; study.SaveChanges(); } } MessageBox.Show("修改成功" ); Main f1 = (Main)this .Owner; f1.Refresh_Method(); f1.Activate(); this .Hide(); }
测试运行 运行测试没有问题。
六、实现查询按钮 新建表checkname,给下拉框添加数据 添加字段
去vs里更新模型数据
在main窗体里面绑定数据
编写代码 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 private void button4_Click (object sender, EventArgs e ) { using (var study = new StudyEFEntities()) { if (comboBox1.SelectedValue.ToString() == "u.id" ) { int ToCheck; if (int .TryParse(textBox1.Text, out ToCheck)) { var test = study.TestData.Where(u => u.id == ToCheck); this .dataGridView1.DataSource = test.ToList(); } } if (comboBox1.SelectedValue.ToString() == "u.username" ) { var test = study.TestData.Where(u => u.username == textBox1.Text); this .dataGridView1.DataSource = test.ToList(); } if (comboBox1.SelectedValue.ToString() == "u.name" ) { var test = study.TestData.Where(u => u.name == textBox1.Text); this .dataGridView1.DataSource = test.ToList(); } if (comboBox1.SelectedValue.ToString() == "u.password" ) { var test = study.TestData.Where(u => u.password == textBox1.Text); this .dataGridView1.DataSource = test.ToList(); } if (comboBox1.SelectedValue.ToString() == "u.phone" ) { var test = study.TestData.Where(u => u.phone == textBox1.Text); this .dataGridView1.DataSource = test.ToList(); } if (comboBox1.SelectedValue.ToString() == "u.email" ) { var test = study.TestData.Where(u => u.email == textBox1.Text); this .dataGridView1.DataSource = test.ToList(); } if (comboBox1.SelectedValue.ToString() == "u.phone" ) { var test = study.TestData.Where(u => u.phone == textBox1.Text); this .dataGridView1.DataSource = test.ToList(); } } } private void button5_Click (object sender, EventArgs e ) { textBox1.Text = "" ; comboBox1.Text = "" ; using (var study = new StudyEFEntities()) { var test = study.TestData; this .dataGridView1.DataSource = test.ToList(); } }
运行测试