WPF 实现可视化操作数据库的程序全解析

在软件开发中,实现对数据库的可视化操作能极大提升开发效率和用户体验。借助 WPF(Windows Presentation Foundation)强大的界面开发能力,我们可以打造出功能丰富、交互友好的数据库操作程序。本文将详细介绍如何使用 WPF 搭建一个可视化操作数据库的程序,帮助大家掌握这一实用的开发技巧。

一、前期准备

(一)开发环境搭建

确保你已经安装了 Visual Studio,这是开发 WPF 应用的主要工具。同时,根据你要操作的数据库类型,准备相应的数据库驱动。例如,若使用 SQL Server,需要安装 Microsoft.Data.SqlClient 库;若使用 MySQL,则需要安装 MySql.Data 库。

(二)数据库设计

在开始编写代码前,先设计好数据库结构。假设我们要创建一个简单的学生信息管理系统,数据库中至少包含一张名为 “Students” 的表,表结构如下:

字段名

数据类型

描述

Id

int

学生 ID,主键,自增长

Name

nvarchar(50)

学生姓名

Age

int

学生年龄

Grade

nvarchar(10)

学生年级

二、创建 WPF 项目

打开 Visual Studio,创建一个新的 WPF 应用项目。在项目创建向导中,为项目命名并选择合适的存储位置。创建完成后,项目结构中会包含App.xaml(应用程序的入口和资源定义文件)、MainWindow.xaml(主窗口文件,用于设计界面)以及MainWindow.xaml.cs(主窗口的代码后端文件,用于编写逻辑代码)。

三、连接数据库

在MainWindow.xaml.cs文件中,添加数据库连接代码。以 SQL Server 为例:


using Microsoft.Data.SqlClient;namespace WpfDatabaseApp{public partial class MainWindow : Window{private string connectionString = "Data Source=YOUR_SERVER_NAME;Initial Catalog=YOUR_DATABASE_NAME;User ID=YOUR_USERNAME;Password=YOUR_PASSWORD";public MainWindow(){InitializeComponent();LoadData();}private void LoadData(){using (SqlConnection connection = new SqlConnection(connectionString)){string query = "SELECT * FROM Students";SqlDataAdapter adapter = new SqlDataAdapter(query, connection);System.Data.DataTable dataTable = new System.Data.DataTable();adapter.Fill(dataTable);// 这里假设界面上有一个名为dataGrid的DataGrid控件,用于显示数据dataGrid.ItemsSource = dataTable.DefaultView;}}}}

上述代码中,connectionString定义了数据库连接字符串,LoadData方法用于从数据库中读取数据并填充到界面的DataGrid控件中。

四、数据展示与编辑

(一)数据展示

在MainWindow.xaml中,添加一个DataGrid控件用于展示数据:


<Grid><DataGrid x:Name="dataGrid" AutoGenerateColumns="True" Margin="10"></DataGrid></Grid>

AutoGenerateColumns="True"表示DataGrid会根据数据源自动生成列。

(二)数据编辑

为了实现数据编辑功能,我们需要在DataGrid中启用编辑模式,并处理数据更新操作。在MainWindow.xaml.cs中添加以下代码:


private void dataGrid_CellEditEnding(object sender, DataGridCellEditEndingEventArgs e){DataGrid dataGrid = sender as DataGrid;DataRowView rowView = dataGrid.SelectedItem as DataRowView;if (rowView!= null){using (SqlConnection connection = new SqlConnection(connectionString)){string updateQuery = "UPDATE Students SET Name = @Name, Age = @Age, Grade = @Grade WHERE Id = @Id";SqlCommand command = new SqlCommand(updateQuery, connection);command.Parameters.AddWithValue("@Name", rowView["Name"]);command.Parameters.AddWithValue("@Age", rowView["Age"]);command.Parameters.AddWithValue("@Grade", rowView["Grade"]);command.Parameters.AddWithValue("@Id", rowView["Id"]);connection.Open();command.ExecuteNonQuery();}}}

同时,在MainWindow.xaml中为DataGrid添加CellEditEnding事件绑定:


<DataGrid x:Name="dataGrid" AutoGenerateColumns="True" Margin="10" CellEditEnding="dataGrid_CellEditEnding"></DataGrid>

这样,当用户在DataGrid中编辑完数据并离开单元格时,数据会自动更新到数据库中。

五、添加数据与删除数据

(一)添加数据

在界面上添加一个 “添加” 按钮,在MainWindow.xaml中:

 
<Button Content="添加" Margin="10" Click="Button_Add_Click" />

在MainWindow.xaml.cs中实现按钮点击事件:


private void Button_Add_Click(object sender, RoutedEventArgs e){using (SqlConnection connection = new SqlConnection(connectionString)){string insertQuery = "INSERT INTO Students (Name, Age, Grade) VALUES (@Name, @Age, @Grade)";SqlCommand command = new SqlCommand(insertQuery, connection);command.Parameters.AddWithValue("@Name", "新学生"); // 这里可以替换为用户输入的值command.Parameters.AddWithValue("@Age", 18); // 这里可以替换为用户输入的值command.Parameters.AddWithValue("@Grade", "一年级"); // 这里可以替换为用户输入的值connection.Open();command.ExecuteNonQuery();LoadData(); // 重新加载数据,刷新界面}}

(二)删除数据

在界面上添加一个 “删除” 按钮,在MainWindow.xaml中:

 
<Button Content="删除" Margin="10" Click="Button_Delete_Click" />

在MainWindow.xaml.cs中实现按钮点击事件:


private void Button_Delete_Click(object sender, RoutedEventArgs e){DataGrid dataGrid = dataGrid;DataRowView rowView = dataGrid.SelectedItem as DataRowView;if (rowView!= null){using (SqlConnection connection = new SqlConnection(connectionString)){string deleteQuery = "DELETE FROM Students WHERE Id = @Id";SqlCommand command = new SqlCommand(deleteQuery, connection);command.Parameters.AddWithValue("@Id", rowView["Id"]);connection.Open();command.ExecuteNonQuery();LoadData(); // 重新加载数据,刷新界面}}}

六、总结

通过以上步骤,我们成功地使用 WPF 实现了一个可视化操作数据库的程序。从数据库连接、数据展示与编辑,到数据的添加和删除,每一步都充分利用了 WPF 的特性和数据库操作的基本原理。在实际项目中,还可以进一步优化界面设计、添加数据验证等功能,提升程序的实用性和稳定性。希望本文能为大家在 WPF 与数据库交互开发方面提供有益的参考,帮助大家快速掌握这一重要的开发技能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/893148.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

13软考高项,项目资源管理

团队章程&#xff1a;价值观&#xff0c;沟通指南&#xff0c;决策标准和过程&#xff0c;冲突处理过程&#xff0c;会议指南和团队共识&#xff01; 资源管理计划&#xff1a;识别资源&#xff0c;获取资源&#xff0c;角色&#xff0c;组织图&#xff0c;培训&#xff0c;团…

Spring AI入门示例HelloWorld

本文重点介绍&#xff0c;基于Spring AI框架&#xff0c;并使用阿里百炼大模型服务平台的AI服务&#xff0c;快速搭建一个springboot工程&#xff0c;并进行简单的AI问答&#xff0c;初步验证Spring AI框架的易用性&#xff0c;以及与阿里巴巴AI框架spring-ai-alibaba-starter的…

git系列之revert回滚

1. Git 使用cherry-pick“摘樱桃” step 1&#xff1a; 本地切到远程分支&#xff0c;对齐要对齐的base分支&#xff0c;举例子 localmap git pull git reset --hard localmap 对应的commit idstep 2&#xff1a; 执行cherry-pick命令 git cherry-pick abc123这样就会将远程…

【C++】结构体(上)

1、结构体基本概念 结构体属于用户自定义当代数据类型&#xff0c;允许用户存储不同当代数据类型 2、结构体定义和使用 语法&#xff1a; struct 结构体名 { 结构体成员列表 }&#xff1b; 通过结构体创建变量的方式有三种&#xff1a; &#xff08;1&#xff09;struc…

技术晋升读书笔记—华为研发

读完《华为研发》第三版&#xff0c;我深感震撼&#xff0c;书中的内容不仅详实地记录了华为公司的成长历程&#xff0c;还揭示了华为成功背后的管理理念和创新思路。这本书通过真实的案例和数据&#xff0c;展示了华为如何从一个小企业发展成全球通信行业的领导者。 一、关键人…

高效实现 Markdown 转 PDF 的跨平台指南20250117

高效实现 Markdown 转 PDF 的跨平台指南 引言 Markdown 文件以其轻量化和灵活性受到开发者和技术写作者的青睐&#xff0c;但如何将其转换为易于分享和打印的 PDF 格式&#xff0c;是一个常见需求。本文整合了 macOS、Windows 和 Linux 三大平台的转换方法&#xff0c;并探讨…

[Mac + Icarus Verilog + gtkwave] Mac运行Verilog及查看波形图

目录 1. MAC安装环境 1. 1 Icarus Verilog 编译 1. 2 gtkwave 查看波形 2. 安装遇到的问题 2. 1 macOS cannot verify that this app is free from malware 2. 2 gtkwave-bin is not compatible with macOS 14 or later 3. 运行示例 3. 1 源代码 3. 2 编译Verilog 3. 3 生成.v…

FRP内网穿透0.61.1新版教程

在上一篇zerotier讲述了如何实现虚拟局域网搭建&#xff0c;这篇会讲述FRP内网穿透的使用教程 那么frp与zerotier的区别是什么呢&#xff1f;&#xff08;说人话&#xff09; FRP 主要用于内网服务向外网的单向暴露。 ZeroTier 用于构建一个虚拟的私有网络&#xff0c;实现多点…

如何通过 Apache Airflow 将数据导入 Elasticsearch

作者&#xff1a;来自 Elastic Andre Luiz 了解如何通过 Apache Airflow 将数据导入 Elasticsearch。 Apache Airflow Apache Airflow 是一个旨在创建、安排&#xff08;schedule&#xff09;和监控工作流的平台。它用于编排 ETL&#xff08;Extract-Transform-Load&#xff0…

通过图形界面展现基于本地知识库构建RAG应用

1. 客户需求 快速完成概念验证(PoC)通过图形界面快速完成演示本地私有数据对比不同模型和成本&#xff0c;决定如何部署 2. 阿里云基于本地知识库构建RAG应用 参考方案&#xff1a; 百炼本地知识库方案 解决方案&#xff1a; FastAPI Gradio Llamaindex qwen-plus 主要三大…

TP4056锂电池充放电芯片教程文章详解·内置驱动电路资源!!!

目录 TP4056工作原理 TP4056引脚详解 TP4056驱动电路图 锂电池充放电板子绘制 编写不易&#xff0c;仅供学习&#xff0c;感谢理解。 TP4056工作原理 TP4056是专门为单节锂电池或锂聚合物电池设计的线性充电器&#xff0c;充电电流可以用外部电阻设定&#xff0c;最大充电…

【Vim Masterclass 笔记21】S09L39:Vim 设置与 vimrc 文件的用法示例(二)

文章目录 S09L39 Vim Settings and the Vimrc File - Part 21 Vim 的配色方案与 color 命令2 map 命令3 示例&#xff1a;用 map 命令快速生成 HTML 代码片段4 Vim 中的 Leader 键5 用 mkvimrc 命令自动生成配置文件 写在前面 本篇为 Vim 自定义配置的第二部分。当中的每个知识…

论文速读|ParGo: Bridging Vision-Language with Partial and Global Views.AAAI25

论文地址&#xff1a;https://arxiv.org/abs/2408.12928 代码地址&#xff1a;https://github.com/bytedance/ParGo bib引用&#xff1a; misc{wang2025pargobridgingvisionlanguagepartial,title{ParGo: Bridging Vision-Language with Partial and Global Views}, author{An…

2024年博客之星年度评选—创作影响力评审入围名单公布

2024年博客之星活动地址https://www.csdn.net/blogstar2024 TOP 300 榜单排名 用户昵称博客主页 身份 认证 评分 原创 博文 评分 平均 质量分评分 互动数据评分 总分排名三掌柜666三掌柜666-CSDN博客1001002001005001wkd_007wkd_007-CSDN博客1001002001005002栗筝ihttps:/…

20250118拿掉荣品pro-rk3566开发板上Android13下在uboot和kernel启动阶段的Rockchip这个LOGO标识

20250118拿掉荣品pro-rk3566开发板上Android13下在uboot和kernel启动阶段的Rockchip这个LOGO标识 2025/1/18 15:12 缘起&#xff1a;做飞凌OK3588-C开发板/核心板【Linux R4】的时候&#xff0c;测试/生产要求没有开机LOGO【飞凌/Rockchip】 要求&#xff1a;黑屏或者中性界面。…

【转】厚植根基,同启新程!一文回顾 2024 OpenHarmony 社区年度工作会议精彩瞬间

在数字化浪潮奔腾不息的今天&#xff0c;开源技术已成为推动科技创新与产业发展的强大引擎。2025年1月10日-11日&#xff0c;OpenAtom OpenHarmony&#xff08;开放原子开源鸿蒙&#xff0c;以下简称“OpenHarmony”或“开源鸿蒙”&#xff09;社区2024年度工作会议于深圳盛大启…

Mybatis 进阶 / Mybatis—Puls (详细)

目录 一.动态SQL 1.1标签 1.2 标签 1.3标签 1.4标签 1.5标签 1.6标签 mybatis总结&#xff1a; 二.Mybatis-Puls 2.1准备工作 2.2CRUD单元测试 2.2.1创建UserInfo实体类 2.2.2编写Mapper接⼝类 2.2.3 测试类 2.3 常见注解 2.3.1TableName 2.3.2TableField 2.4打印日…

Go 切片:用法和本质

要想更好的了解一个知识点&#xff0c;实战是最好的经历。 题目 我这里放一道题目&#xff1a; package mainimport "fmt"func SliceRise(s []int) {s append(s, 0)for i : range s {s[i]}fmt.Println(s) }func SlicePrint() {s1 : []int{1, 2}s2 : s1s2 append…

如何下载对应城市的地理json文件

这里采用的是阿里地图工具进行查找&#xff1a; DataV.GeoAtlas地理小工具系列 由阿里云DataV数据可视化团队出品,多年深耕数据可视化领域,数据大屏业务开拓者和领航者。致力用震撼而清晰的视觉语言,让更多人读懂大数据,受惠数据驱动的决策方式 第一步打开网站 &#xff1a; …

AI 大爆发时代,音视频未来路在何方?

AI 大模型突然大火了 回顾2024年&#xff0c;计算机领域最大的变革应该就是大模型进一步火爆了。回顾下大模型的发展历程&#xff1a; 萌芽期&#xff1a;&#xff08;1950-2005&#xff09; 1956年&#xff1a;计算机专家约翰麦卡锡首次提出“人工智能”概念&#xff0c;标志…