效果图:
一、创建WPF窗体程序
创建步骤(vs);
二、通过NuGet程序包管理器安装如下包:
安装成功效果:
三、新建文件夹,命名为Model、添加student实体类、studentContext数据库关系映射类。如图
student实体类:
using System;
using System.Collections.Generic;
using System.Text;
namespace CRUDWPF.Model
{
public class Students//学生类
{
//学生ID
public int Id { get; set; }
//学生名称
public string StudentName { get; set; }
//学生性别
public string Gender { get; set; }
//学生出生年月
public DateTime Birthday { get; set; }
//学生地址
public string Address { get; set; }
//家长电话
public string PatriarchTel { get; set; }
}
}
studentContext数据库关系映射类:
using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.Text;
namespace CRUDWPF.Model
{
public class StudentContext : DbContext
{
//映射类
public DbSet<Students> GetStudents { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
//数据库链接,创建
optionsBuilder.UseSqlServer("Data Source=.;Initial Catalog=StudentDB;Integrated Security=True");
}
}
}
四、通过EF core反向构建数据库:
通过程序包管理控制台:
执行操作:
执行成功后会构建好数据库和下图文件夹:
五、新建文件夹Dal构建StuDal类(方法集)
StuDal类:
using CRUDWPF.Model;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace CRUDWPF.Dal
{
public class StuDal
{
public static StudentContext studentContext = new StudentContext();
//查询所有学生数据
public static List<Students> GetStudent()
{
return studentContext.GetStudents.ToList();
}
//添加新的学生信息
public static void InsertStu(Students students)
{
studentContext.GetStudents.Add(students);
studentContext.SaveChanges();
}
//修改学生信息
public static void UpdateStu(Students students)
{
var id = studentContext.GetStudents.Find(students.Id);
var entry = studentContext.Entry(id);
entry.CurrentValues.SetValues(students);
entry.Property(p => p.Id).IsModified = false;
studentContext.SaveChanges();
}
//删除学生信息
public static void DeleteStu(int ids)
{
Students student = studentContext.GetStudents.FirstOrDefault(p => p.Id == ids);
studentContext.GetStudents.Remove(student);
studentContext.SaveChanges();
}
//学生信息关键字查询
public static List<Students> SetKeyStudent(string StuName)
{
return studentContext.GetStudents.Where(p=>p.StudentName.Contains(StuName)).ToList();
}
//学生信息ID查询
public static Students SetIdStudent(int ids)
{
return studentContext.GetStudents.FirstOrDefault(p => p.Id == ids);
}
}
}
六、构建数据显示页面
项目右键新建项(页面命名:MainWindow):
页面前台代码:
<Window x:Class="CRUDWPF.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:CRUDWPF"
mc:Ignorable="d"
Title="MainWindow" Height="451" Width="800">
<Grid Margin="0,0,0,3">
<Grid.ColumnDefinitions>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<TextBox HorizontalAlignment="Left" Margin="93,10,0,0" Text="" Name="StuKey" TextWrapping="Wrap" VerticalAlignment="Top" Width="244" Height="30" FontSize="18"/>
<Label Content="关键字:" HorizontalAlignment="Left" Margin="32,10,0,0" VerticalAlignment="Top" Height="30" Width="57"></Label>
<Button Content="查询" Name="SetStudent" HorizontalAlignment="Left" Margin="362,10,0,0" VerticalAlignment="Top" Height="30" Width="60" Click="SetStudent_Click"/>
<Button Content="刷新" HorizontalAlignment="Right" Name="Refresh" Margin="0,10,112,0" VerticalAlignment="Top" Height="30" Width="60" RenderTransformOrigin="-3.308,0.523" Click="Refresh_Click"/>
<Button Content="添加" HorizontalAlignment="Right" Name="AddStu" Margin="0,10,30,0" VerticalAlignment="Top" Height="30" Width="59" Click="AddStu_Click"/>
<Rectangle Height="1" Margin="-352,59,-348,0" Stroke="Black" VerticalAlignment="Top" Width="1500"/>
<DataGrid x:Name="StudentShow" AutoGenerateColumns="False" CanUserAddRows="False" ColumnWidth="*" Grid.Column="0" Height="338" VerticalAlignment="Top" Margin="10,83,10,0" MinRowHeight="30" ColumnHeaderHeight="30">
<DataGrid.Columns>
<DataGridTextColumn Header="学生ID" Binding="{Binding Id}"/>
<DataGridTextColumn Header="学生姓名" Binding="{Binding StudentName}"/>
<DataGridTextColumn Header="性别" Binding="{Binding Gender}"/>
<DataGridTextColumn Header="出生年月" Binding="{Binding Birthday}"/>
<DataGridTextColumn Header="家庭住址" Binding="{Binding Address}"/>
<DataGridTextColumn Header="家长电话" Binding="{Binding PatriarchTel}"/>
<DataGridTemplateColumn Header="操作">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Grid>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Center" VerticalAlignment="Center">
<Button Width="40" Height="20" Content="编辑" Tag="{Binding Id}" FontSize="10" Click="Button_Click"></Button>
<Button Width="40" Height="20" Name="DeleteDetail" Tag="{Binding Id}" Margin="10,0,0,0" Content="删除" FontSize="10" Click="DeleteDetail_Click"></Button>
</StackPanel>
</Grid>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
</Grid>
</Window>
后台代码:
using CRUDWPF.Dal;
using CRUDWPF.Model;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace CRUDWPF
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
List<Students> ds = StuDal.GetStudent().ToList();
StudentShow.ItemsSource = ds;
}
//查询数据
private void SetStudent_Click(object sender, RoutedEventArgs e)
{
string key = StuKey.Text;
List<Students> ds = StuDal.SetKeyStudent(key).ToList();
StudentShow.ItemsSource = ds;
}
//新增弹窗
private void AddStu_Click(object sender, RoutedEventArgs e)
{
StudentAdd isw = new StudentAdd();
isw.Title = "添加";
isw.Owner = this;//设置父窗口,这样可以在父窗口中居中
isw.ShowDialog();//模式,弹出!
}
//删除详情
private void DeleteDetail_Click(object sender, RoutedEventArgs e)
{
MessageBoxResult dr = MessageBox.Show("确定要删除吗 ?,删除后不可恢复", "提示", MessageBoxButton.OKCancel, MessageBoxImage.Question);
if (dr == MessageBoxResult.OK)
{
Button btn = sender as Button;
if (btn != null)
{
int id = Convert.ToInt32(btn.Tag);
StuDal.DeleteStu(id);
}
}
List<Students> ds = StuDal.GetStudent().ToList();
StudentShow.ItemsSource = ds;
}
//刷新页面数据
private void Refresh_Click(object sender, RoutedEventArgs e)
{
List<Students> ds = StuDal.GetStudent().ToList();
StudentShow.ItemsSource = ds;
}
//编辑信息
private void Button_Click(object sender, RoutedEventArgs e)
{
Button btn = sender as Button;
if (btn != null)
{
int id = Convert.ToInt32(btn.Tag);
UpdateStu isw = new UpdateStu(id);
isw.Title = "编辑";
isw.Owner = this;//设置父窗口,这样可以在父窗口中居中
isw.ShowDialog();//模式,弹出!
}
}
}
}
七、新增数据页面构建
页面名称:StudentAdd
前台代码:
<Window x:Class="CRUDWPF.StudentAdd"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:CRUDWPF"
mc:Ignorable="d"
Title="StudentAdd" Height="413" Width="657">
<Grid Margin="0,0,0,-5">
<Grid.ColumnDefinitions>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<Label Content="新增学生信息" HorizontalAlignment="Left" Margin="306,14,0,0" VerticalAlignment="Top" FontSize="16"/>
<Label Content="姓名:" HorizontalAlignment="Left" Margin="111,50,0,0" VerticalAlignment="Top" Height="30" FontSize="16"/>
<TextBox HorizontalAlignment="Left" Name="StuName" Margin="173,51,0,0" Text="" TextWrapping="Wrap" VerticalAlignment="Top" Width="393" Height="30" FontSize="16"/>
<Label Content="性别:" HorizontalAlignment="Left" Margin="111,92,0,0" VerticalAlignment="Top" Height="30" FontSize="16"/>
<ComboBox HorizontalAlignment="Left" Name="StuGender" Margin="173,94,0,0" VerticalAlignment="Top" Width="393" FontSize="16" Height="30">
<ComboBoxItem Content="男" Selector.IsSelected="True"></ComboBoxItem>
<ComboBoxItem Content="女" ></ComboBoxItem>
</ComboBox>
<Label Content="出生年月:" HorizontalAlignment="Left" Margin="76,138,0,0" VerticalAlignment="Top" Height="30" FontSize="16"/>
<DatePicker HorizontalAlignment="Left" Name="StuBirthday" Margin="174,138,0,0" VerticalAlignment="Top" Height="30" Width="392" FontSize="16"/>
<Label Content="家庭住址:" HorizontalAlignment="Left" Margin="76,183,0,0" VerticalAlignment="Top" Height="30" FontSize="16"/>
<TextBox HorizontalAlignment="Left" Name="StuAddress" Margin="173,184,0,0" Text="" TextWrapping="Wrap" VerticalAlignment="Top" Width="393" Height="30" FontSize="16"/>
<Label Content="家长电话:" HorizontalAlignment="Left" Margin="77,228,0,0" VerticalAlignment="Top" Height="30" FontSize="16"/>
<TextBox HorizontalAlignment="Left" Name="StuPatriarchTel" Margin="174,228,0,0" Text="" TextWrapping="Wrap" VerticalAlignment="Top" Width="393" Height="30" FontSize="16"/>
<Button Content="新增" HorizontalAlignment="Left" Name="AddNewStu" Margin="174,307,0,0" VerticalAlignment="Top" Height="29" Width="70" Click="AddNewStu_Click"/>
<Button Content="取消" HorizontalAlignment="Left" Name="Addout" Margin="328,307,0,0" VerticalAlignment="Top" Height="29" Width="70" Click="Addout_Click"/>
</Grid>
</Window>
后台代码:
using CRUDWPF.Model;
using CRUDWPF.Dal;
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
namespace CRUDWPF
{
/// <summary>
/// StudentAdd.xaml 的交互逻辑
/// </summary>
public partial class StudentAdd : Window
{
public StudentAdd()
{
WindowStartupLocation = WindowStartupLocation.CenterOwner;//在父窗口中居中
InitializeComponent();
}
//取消新增
private void Addout_Click(object sender, RoutedEventArgs e)
{
this.Close();
}
//新增学生信息
private void AddNewStu_Click(object sender, RoutedEventArgs e)
{
//学生写姓名
string Name = StuName.Text;
//学生性别
string Gender = StuGender.Text;
//出生年月
string Birthday = StuBirthday.Text;
//家庭住址
string Address = StuAddress.Text;
//家长电话
string PatriarchTel = StuPatriarchTel.Text;
if (Name!=""&&Gender!="" && Birthday !="" && Address !="" && PatriarchTel !="")
{
Students student = new Students();
student.StudentName = Name;
student.Gender = Gender;
student.Birthday = DateTime.Parse(Birthday);
student.Address = Address;
student.PatriarchTel = PatriarchTel;
StuDal.InsertStu(student);
this.Close();//关闭当前窗口
}
else
{
MessageBoxResult dr = MessageBox.Show("数据填写不完整", "提示", MessageBoxButton.OK, MessageBoxImage.Question);
}
}
}
}
八、构建修改信息页面
注意:tag跨页面传值
页面名称:UpdateStu
前台代码
<Window x:Class="CRUDWPF.UpdateStu"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:CRUDWPF"
mc:Ignorable="d"
Title="UpdateStu" Height="406" Width="692">
<Grid Margin="0,0,10,-5">
<Label Content="修改学生信息" HorizontalAlignment="Left" Margin="306,14,0,0" VerticalAlignment="Top" FontSize="16"/>
<Label Content="姓名:" HorizontalAlignment="Left" Margin="111,50,0,0" VerticalAlignment="Top" Height="30" FontSize="16"/>
<TextBox HorizontalAlignment="Left" Name="StuName" Margin="173,51,0,0" Text="" TextWrapping="Wrap" VerticalAlignment="Top" Width="393" Height="30" FontSize="16"/>
<Label Content="性别:" HorizontalAlignment="Left" Margin="111,92,0,0" VerticalAlignment="Top" Height="30" FontSize="16"/>
<ComboBox HorizontalAlignment="Left" Name="StuGender" Margin="173,94,0,0" VerticalAlignment="Top" Width="393" FontSize="16" Height="30">
<ComboBoxItem Content="男" ></ComboBoxItem>
<ComboBoxItem Content="女" ></ComboBoxItem>
</ComboBox>
<Label Content="出生年月:" HorizontalAlignment="Left" Margin="76,138,0,0" VerticalAlignment="Top" Height="30" FontSize="16"/>
<DatePicker HorizontalAlignment="Left" Name="StuBirthday" Margin="174,138,0,0" VerticalAlignment="Top" Height="30" Width="392" FontSize="16"/>
<Label Content="家庭住址:" HorizontalAlignment="Left" Margin="76,183,0,0" VerticalAlignment="Top" Height="30" FontSize="16"/>
<TextBox HorizontalAlignment="Left" Name="StuAddress" Margin="173,184,0,0" Text="" TextWrapping="Wrap" VerticalAlignment="Top" Width="393" Height="30" FontSize="16"/>
<Label Content="家长电话:" HorizontalAlignment="Left" Margin="77,228,0,0" VerticalAlignment="Top" Height="30" FontSize="16"/>
<TextBox HorizontalAlignment="Left" Name="StuPatriarchTel" Margin="174,228,0,0" Text="" TextWrapping="Wrap" VerticalAlignment="Top" Width="393" Height="30" FontSize="16"/>
<Button Content="修改" HorizontalAlignment="Left" Name="UpdateNewStu" Margin="174,307,0,0" VerticalAlignment="Top" Height="29" Width="70" Click="UpdateNewStu_Click"/>
<Button Content="取消" HorizontalAlignment="Left" Name="Updateout" Margin="328,307,0,0" VerticalAlignment="Top" Height="29" Width="70" Click="Updateout_Click"/>
</Grid>
</Window>
后台代码:
using CRUDWPF.Dal;
using CRUDWPF.Model;
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
namespace CRUDWPF
{
/// <summary>
/// UpdateStu.xaml 的交互逻辑
/// </summary>
public partial class UpdateStu : Window
{
public static int ids;
public UpdateStu(int id)
{
ids = id;
WindowStartupLocation = WindowStartupLocation.CenterOwner;//在父窗口中居中
InitializeComponent();
Students student=StuDal.SetIdStudent(ids);
if (student!=null)
{
StuName.Text = student.StudentName;
StuGender.SelectedIndex = int.Parse(student.Gender == "男" ? "0" : "1");
StuBirthday.Text = student.Birthday.ToString("yyyy/MM/dd");
StuAddress.Text = student.Address;
StuPatriarchTel.Text = student.PatriarchTel;
}
}
//修改数据
private void UpdateNewStu_Click(object sender, RoutedEventArgs e)
{
//学生写姓名
string Name = StuName.Text;
//学生性别
string Gender = StuGender.Text;
//出生年月
string Birthday = StuBirthday.Text;
//家庭住址
string Address = StuAddress.Text;
//家长电话
string PatriarchTel = StuPatriarchTel.Text;
if (Name != "" && Gender != "" && Birthday != "" && Address != "" && PatriarchTel != "")
{
Students student = new Students();
student.Id = ids;
student.StudentName = Name;
student.Gender = Gender;
student.Birthday = DateTime.Parse(Birthday);
student.Address = Address;
student.PatriarchTel = PatriarchTel;
StuDal.UpdateStu(student);
this.Close();//关闭当前窗口
}
else
{
MessageBoxResult dr = MessageBox.Show("数据填写不完整", "提示", MessageBoxButton.OK, MessageBoxImage.Question);
}
}
//取消修改
private void Updateout_Click(object sender, RoutedEventArgs e)
{
this.Close();//关闭页面
}
}
}