最新文章 (全部类别)
C# 使用Linq递归查询当前节点及所有子节点
You must install .NET Desktop Runtime to run this application
Swagger生成API接口注释、参数注释、实体模型注释
Failed to load APl definition. response status is 500 /swagger/vl/swagger.json
.NET8/.NETCore 依赖接口注入:自动注入项目中所有接口和自定义类
CSFramework.EF应用 - ASP.NETCore/WebApi使用IDatabase动态代理创建多个数据库实例
CSFramework.EF数据库框架简介
EFCore查询数据报错:SqlNullValueException:“Data is Null. This method or property cannot be called on Null values
使用Photoshop PS制作GIF动画(等待窗体GIF图标)
C# Winform等待窗体WaitingForm组件下载(CSFramework提供)
使用VS2022升级助手将.NETFramework项目升级到.NET8/.NETCore
VS解决方案升级:.NETFramework升级到.NETCore(.NET6~.NET8)
CSFramework.COM C/S软件开发框架视频下载
CSFramework.Authentication 软件证书管理系统 - MAC地址管理
CSFramework.Authentication 软件证书管理系统 - 证书管理
CSFramework.Authentication 软件证书管理系统 - 制作软件授权证书
CSFrameworkV6快速开发框架 - SqlServer(MsSql)数据库测试报告
C/S架构软件开发平台 - 旗舰版V6 软件简介
C/S架构软件开发平台 - 旗舰版V6.1 - 新功能汇总
C/S客户端软件授权设计方案 - MAC地址白名单+软件到期时间授权
C/S客户端软件授权设计方案 - 在线用户并发数+软件到期时间授权
CSFramework.Authentication 软件授权证书管理系统
CSFrameworkV6旗舰版开发框架 - 集成软件授权认证系统
CSFrameworkV6旗舰版-新功能-在线用户查询、设置用户下线
CSFramework.Authentication 软件授权认证系统 - 软件测试报告
CSFrameworkV6旗舰版新功能-客户端软件授权(在线用户并发数+MAC白名单+软件到期时间)
特殊文本符号大全|Word中的特殊文本符号|图案符号
LINQ高级语法:使用ExecuteUpdate方法查询并批量更新数据(Where+Update)
C/S架构软件开发平台 - 旗舰版V6.0 - 底层框架迭代开发
DevExpress v24破解步骤
C#获取应用程序当前文件目录位置(安装路径)
SqlException: 列名 'Discriminator' 无效。
.NET C/S架构软件用户授权设计方案(mac地址+白名单用户)
B/S开发框架NuGet包、组件介绍
C/S框架软件产品客户案例
C/S架构软件开发平台 - 旗舰版V6.0 - 自动创建数据库备份计划
SqlServer自动备份计划,备份多个数据库,自动删除备份文件
CSFrameworkV6快速开发框架 - 两种报表数据源查询方式及优缺点
SqlServer使用xp_cmdshell删除备份文件
SqlServer备份数据库存储过程:p_BackupDB
IWebHostEnvironment接口怎么引用?
Docker Desktop使用指南(Windows操作系统)
VSCode开发工具使用笔记
本地源“C:\Program Files\DevExpress 22.2\Components\System\Components\Packages”不存在
CSFrameworkV6旗舰版-成功案例-合肥联宝MES系统
CSFrameworkV6旗舰版-成功案例-威海广泰MES系统
CSFrameworkV6软件开发框架+达梦数据库(国产数据库)测试报告
国产化软件设计:遵循信创要求,助力信息技术自主创新
DevExpress组件版本下载、安装与VS开发环境 - Winform C/S框架
CSFrameworkV6软件开发框架 - MySql数据库测试报告
.net敏捷开发,创造卓越

C# 数据窗体实现增删改查(CRUD)源码下载(原)


  C# 数据窗体实现增删改查(CRUD)源码下载(原)
C# 数据窗体实现增删改查(CRUD)源码下载(原)


本站原创文章是有针对性地实现一个功能或一个简单的项目. 有很多刚毕业的学生都有着丰富的理论知识,通过学习本站实例源码,我们相信很快提高您的开发经验。但开发较大型项目,光从实践角度来讲还是不够的,尽管少数学生在校期间开发出一些小软件,总体来讲经验还是不足,需要长时间的积累和学习。


就实现增删改查,不同的开发员会有不同的实现方式.有人会说:不就是实现增删改查嘛,有何难度!邓老不是说过不管黑猫白猫捉到老鼠就是好猫!不要管我用什么方式实现,扯远了离题了. 我相信每一位coder都能实现这些简单功能的。这篇文章的目的是分享本人是如何实现增删改查的,通过这个示范程序希望能帮助到您。有兴趣的话请模仿这个小程序,多动手自然熟练了,熟能生巧嘛!


程序介绍:

1.数据查询页面

主要是查询数据及展示,输入查询条件按查询按钮从MDB数据库获取数据,用DataGrid显示出来。
本文重点是实现增删改查,所以不注重界面美观,如果配合DevExpress组件更加完美了。

贴图图片


2.编辑数据页面

在[数据查询页面]内查询出数据,选中一条记录,点工具栏的[修改]按钮打开编辑数据页面.视数据量的大小可以配置该页,比如增加一些图片什么的.只要认为专业且美观就行. 比如采购订单[审核]功能,可以制做一些单据状态的图片,如"已审核","未批准"之类的红色Stamp图片.

贴图图片


3.解决方案源代码视图


本人习惯了将项目分层,这个解决方案有3个Project。本来只想做一个EXE文件的,总觉得良心不安于是分出两个DLL. 如果认为是多此一举尽管砸砖。

贴图图片




业务逻辑控制:

1.界面设计及控件状态控制(如按钮状态)

2.业务代码.(如增/删/改/查操作数据)

留意按钮状态控制,当编辑数据时新增/修改/删除按钮禁止,否则会出乱子, 取消和保存按钮可用,反之亦然.

注意这段代码,另外还有btnEdit,btnCancel等按钮. (状态控制)

private void btnAdd_Click(object sender, EventArgs e)
{
   _TYPE = OperateType.Add;
   this.ShowData(false); //显示数据
   this.ShowDetailPage(); //显示数据编辑页面
   this.SetEditMode(true); //显示状态为修改模式
}


主窗体源代码.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using vjsdn.EasyEdit.Business;
using System.Diagnostics;

namespace CSFramework.EasyEdit
{
   public partial class frmMain : Form
   {
      private bllUser _BLL = new bllUser();
      private OperateType _TYPE = OperateType.Browse;
      
      //操作类型,新增/修改/显示数据
      private enum OperateType
      {
         Add,
         Edit,
         Browse
      }
      
      public frmMain()
      {
         InitializeComponent();
      }
      
      private void frmMain_Load(object sender, EventArgs e)
      {
         bllService.SetDataBasePath(); //因用到Access,指定一个MDB文件
         
         this.SetEditMode(false);
         
         //打开窗体时显示所有数据.
         //当处理大数据时可初始化查询条件或查询少量数据
         btnQuery.PerformClick();
      }
      
      private void btnQuery_Click(object sender, EventArgs e)
      {
         dataGridView1.DataSource = null;
         DataTable dt = _BLL.Search(txt_UserID.Text, txt_UserName.Text);
         dataGridView1.DataSource = dt;
      }
      
      //数据操作两种状态.1:数据修改状态 2:查看数据状态
      private void SetEditMode(bool isEdit)
      {
         btnAdd.Enabled = !isEdit;
         btnEdit.Enabled = !isEdit;
         btnQuery.Enabled = !isEdit;
         btnDelete.Enabled = !isEdit;
         btnView.Enabled = !isEdit;
         btnSave.Enabled = isEdit;
         btnCancel.Enabled = isEdit;
         
         txtUserID.Enabled = isEdit;
         txtUserName.Enabled = isEdit;
      }
      
      private void btnAdd_Click(object sender, EventArgs e)
      {
         _TYPE = OperateType.Add;
         this.ShowData(false);
         this.ShowDetailPage();
         this.SetEditMode(true);
      }
      
      private void btnEdit_Click(object sender, EventArgs e)
      {
         if (dataGridView1.CurrentRow != null)
         {
            _TYPE = OperateType.Edit;
            this.ShowData(true);
            this.ShowDetailPage();
            this.SetEditMode(true);
         }
         else
         MessageBox.Show("没有选择要修改的记录!");
      }
      
      private void ShowData(bool bindData)
      {
         txtUserID.Clear();
         txtUserName.Clear();
         
         if (bindData && dataGridView1.CurrentRow != null)
         {
            DataRow dr = (dataGridView1.CurrentRow.DataBoundItem as DataRowView).Row;
            txtUserID.Text = dr["UserID"].ToString();
            txtUserName.Text = dr["UserName"].ToString();
         }
         
         txtUserID.Focus();
      }
      
      private void btnSave_Click(object sender, EventArgs e)
      {
         try
         {
            bool ret = false; //保存结果
            
            DataRow data = CreateRow();
            
            if (_TYPE == OperateType.Add)
            ret = _BLL.AddUser(data);
            else if (_TYPE == OperateType.Edit)
            ret = _BLL.UpdateUser(data);
            
            if (ret) //保存成功
            {
               _TYPE = OperateType.Browse;
               SetEditMode(false);
               this.ShowDetailPage();
               
               btnQuery.PerformClick();//刷新数据
            }
            else
            {
               MessageBox.Show("保存失败");
            }
         }
         catch (Exception ex)
         {
            MessageBox.Show(ex.Message);
         }
      }
      
      //创建一个DataRow,用于保存数据
      //严格要求的话这里应该要使用数据模型,如建立一个User类
      //本文重点是演示增删改查,所以忽略了数据模型.
      //易学网 http://www.vjsdn.com/bbs/bbsTopicDetails.aspx?pid=587
      //这个帖内讲到三层体系结构应用实例
      private DataRow CreateRow()
      {
         DataRow row = this.GetCurrentRow();
         row["UserID"] = txtUserID.Text;
         row["UserName"] = txtUserName.Text;
         return row;
      }
      
      //获取表格中选择的记录DataRow
      private DataRow GetCurrentRow()
      {
         if (dataGridView1.CurrentRow == null) return null;
         
         DataRowView dv = dataGridView1.CurrentRow.DataBoundItem as DataRowView;
         return dv.Row;
      }
      
      private void btnCancel_Click(object sender, EventArgs e)
      {
         if (AskQuestion("确定要取消吗?"))
         {
            _TYPE = OperateType.Browse;
            SetEditMode(false);
            this.ShowDetailPage();
         }
      }
      
      private bool AskQuestion(string msg)
      {
         return DialogResult.Yes == MessageBox.Show(msg, "易学网 (www.vjsdn.com)", MessageBoxButtons.YesNo);
      }
      
      private void btnDelete_Click(object sender, EventArgs e)
      {
         if (AskQuestion("确定要删除吗?"))
         {
            DataRow row = this.GetCurrentRow();
            if (row == null) return;
            
            bool ret = _BLL.DeleteUser(row["UserID"].ToString());
            if (ret)
            MessageBox.Show("删除成功");
            else
            MessageBox.Show("删除失败!");
            
            btnQuery.PerformClick();
         }
      }
      
      private void btnAbout_Click(object sender, EventArgs e)
      {
         new frmAboutVjsdn().Show();
      }
      
      private void btnVJSDN_Click(object sender, EventArgs e)
      {
         Process.Start("http://www.vjsdn.com");
      }
      
      private void ShowSummaryPage()
      {
         tabControl1.SelectedIndex = 0;
      }
      
      private void ShowDetailPage()
      {
         tabControl1.SelectedIndex = 1;
         
         if (_TYPE == OperateType.Add)
         lblState.Text = "新增数据 Add Data Mode";
         
         if (_TYPE == OperateType.Edit)
         lblState.Text = "修改数据 Edit Data Mode";
         
         if (_TYPE == OperateType.Browse)
         lblState.Text = "显示数据 Browse Data Mode";
      }
      
      private void btnView_Click(object sender, EventArgs e)
      {
         if (dataGridView1.CurrentRow != null)
         {
            _TYPE = OperateType.Browse;
            this.ShowData(true);
            this.ShowDetailPage();
            this.SetEditMode(false);
         }
         else
         MessageBox.Show("没有选择要修改的记录!");
      }
   }
}



Soruce Code:




C/S框架网|原创精神.创造价值.打造精品

扫一扫加微信
C/S框架网作者微信 C/S框架网|原创作品.质量保障.竭诚为您服务

版权声明:本文为开发框架文库发布内容,转载请附上原文出处连接
C/S框架网
上一篇:C#进程管理器源码(Managing .Net Process C#)
下一篇:C#委托(Delegate)事件(Event)应用详解 (原)
评论列表

发表评论

评论内容
昵称:
关联文章

C# 数据实现增删(CRUD)下载()
Winform调用WebApi接口实现增删CRUD实例
Winform增删基础框架|C/S框架网
表单上实现增删,除了生成的BLL,DAL和ORM表,还需要处理什么?
C# Winform增删快速开发框架|C/S框架网
C#开发的MDI架构+Access数据库应用程序(增删)
新增的基础资料,Toolbar上没有增删按钮?
CSFramework.WebApi开发框架模拟Web用户端登录、调用WebApi接口增删数据
增删打印审核锁定 数据操作常用图标 32X32
新建基类frmBaseGridEditForm,在表格中增删
C#将文件格式ANSI为UTF-8
Form - 车辆管理C#
C#通用勾选复选 ()
C#.Net WCF实例详解及下载
Form - 生产计划排程C#
Winform查询数据对话与选择资料实现|C/S框架网
DevExpress XtraReport报表实例下载(C#)
自定义消息 - 实例 - C/S快速开发框架旗舰版V5
CSFrameworkV6旗舰版 - 单表基础资料完整C#
代码生成器 CodeGenerator - 将加入到VS解决方案

热门标签
软件著作权登记证书 .NET Reactor .NET5 .NET6 .NET7 .NET8 .NETFramework APP AspNetCore Auth-软件授权注册系统 Axios B/S B/S开发框架 B/S框架 BSFramework Bug Bug记录 C#加密解密 C#源码 C/S CHATGPT CMS系统 CodeGenerator CSFramework.DB CSFramework.EF CSFrameworkV1学习版 CSFrameworkV2标准版 CSFrameworkV3高级版 CSFrameworkV4企业版 CSFrameworkV5旗舰版 CSFrameworkV6.0 CSFrameworkV6.1 CSFrameworkV6旗舰版 DAL数据访问层 Database datalock DbFramework Demo教学 Demo实例 Demo下载 DevExpress教程 Docker Desktop DOM EFCore EF框架 Element-UI EntityFramework ERP ES6 Excel FastReport GIT HR IDatabase IIS JavaScript LINQ MES MiniFramework MIS MySql NavBarControl NETCore Node.JS NPM OMS Oracle资料 ORM PaaS POS Promise API PSD RedGet Redis SAP Schema SEO SEO文章 SQL SQLConnector SqlServer Swagger TMS系统 Token令牌 VS2022 VSCode VS升级 VUE WCF WebApi WebApi NETCore WebApi框架 WEB开发框架 Windows服务 Winform 开发框架 Winform 开发平台 WinFramework Workflow工作流 Workflow流程引擎 XtraReport 安装环境 版本区别 报表 备份还原 踩坑日记 操作手册 达梦数据库 代码生成器 迭代开发记录 功能介绍 国际化 基础资料窗体 架构设计 角色权限 开发sce 开发工具 开发技巧 开发教程 开发框架 开发平台 开发指南 客户案例 快速搭站系统 快速开发平台 框架升级 毛衫行业ERP 秘钥 密钥 权限设计 软件报价 软件测试报告 软件加壳 软件简介 软件开发框架 软件开发平台 软件开发文档 软件授权 软件体系架构 软件下载 软件著作权登记证书 软著证书 三层架构 设计模式 生成代码 实用小技巧 视频下载 收钱音箱 数据锁 数据同步 微信小程序 未解决问题 文档下载 喜鹊ERP 喜鹊软件 系统对接 详细设计说明书 新功能 信创 行政区域数据库 需求分析 疑难杂症 蝇量级框架 蝇量框架 用户管理 用户开发手册 用户控件 在线支付 纸箱ERP 智能语音收款机 自定义窗体 自定义组件 自动升级程序
联系我们
联系电话:13923396219(微信同号)
电子邮箱:23404761@qq.com
站长微信二维码
微信二维码