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框架演示)](image-https://video-community.csdnimg.cn/vod-84deb4/a090dd94a7e271eebfde0675b3ed0102/snapshots/8ea7d139d04a45018cee00f5941a4830-00004.jpg?auth_key=4857630234-0-0-fd49d3e2a45ced4ff569beca2381b74b)(title-EF%E6%A1%86%E6%9E%B6%E6%BC%94%E7%A4%BA)%5D)

运行环境

Visual Studio 2019 SQL Server EntityFramework 6.2.0

一、创建项目,编写数据库

创建一个Windows窗体应用(.NET Framework)

添加新项目

image-20241129183348720

具体内容创建后再创建下图: 可视化界面

创建SQL数据库,创建表

创建数据库StudyEF,创建表如下: 在这里要强调一点,在创建表的时候一定设置主键,不然创建后的ef框架会有问题。 建表往表里面添加几条数据,方便进行测试 表中数据

给项目添加EF实体数据模型

添加一个ADO.NET实体数据模型,我将其命名为EFData,然后进行下面操作 选择第一个继续新建连接测试连接修改对应的连接 添加 然后就是完成,漫长的等待创建完成

创建成功

二、DataGridView绑定数据源

添加数据库下一步,下一步,然后选择连接 在这里插入图片描述下一步,下一步,一直到下图,选中表,点击完成 在这里插入图片描述 添加完成后,dgv控件自动显示字段名 在这里插入图片描述 这里的表头可以根据需求修改 在这里插入图片描述 运行测试,数据显示正常 在这里插入图片描述

三、实现添加按钮

编写代码

首先添加一个Add的windows窗体 如图所示: 添加窗体设计鼠标双击添加按钮,在添加按钮事件里面开始编写:

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 // 假设TestData是您的实体类  
           {
               // 在此处设置test对象的属性,例如:  
               password = password,
               username=username,
               name=name,
               age=age,
               phone=phone,
               email=email,
               address=address
           };

           // 将test对象添加到数据库中  
           study.TestData.Add(test);
           // 保存更改到数据库  
           study.SaveChanges();
       }
       MessageBox.Show("添加成功");
       Main f1 = (Main)this.Owner;
       f1.Refresh_Method();
       f1.Activate();
       this.Hide();

添加在主页面(原来我写的是Test窗体,但是重新生成解决方案了也没有显示,估计是重名了与其他功能,于是我主界面换成了Main窗体)的添加按钮里面编写new一个窗体,并且写一个让数据刷新的方法,通过owner在添加窗体调用,这样添加完成原来的窗体更新数据。

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窗体里面,双击删除按钮

//删除按钮
        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窗体中修改按钮事件

//修改按钮
       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窗体中添加参数绑定

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窗体中添加修改按钮代码

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窗体里面绑定数据 在这里插入图片描述

编写代码

//查询按钮实现
       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();

           }
       }

运行测试

在这里插入图片描述

← 下一篇 【Vue】基础语法详解

【蓝桥杯】23年省赛B组 上一篇 →