[易学原创]C# 数据操作窗体实现增/删/改/查(图)(源代码)

转自C#易学论坛
http://www.vjsdn.com/bbs/bbsTopicDetails.aspx?pid=110101223

作为一个倡导易学的网站,应该发布一些C#入门级的资料,我这样想过也做过,但一些基础的理论知识如C#语法及数据结构等内容会少些.因为这些内容在网络上随手可得,只要打开百度网页输入一个关键字搜索就行了.

易学网的易学原创文章是有针对性地实现一个功能或一个简单的项目. 有很多刚毕业的新生都有丰富的理论知识也积累了一些开发经验. 从实践角度来讲还是不够的,尽管少数学生在校期间开发出一些产品.总体来讲经验还是不足的.

就数据操作窗体实现增/删/改/查,不同的人会有不同的实现方法,实现的方式也有优有劣.有人会说:不就是实现增/删/改/查嘛,有何难度!邓老不是说过:黑猫白猫捉到老鼠就是好猫!你不管我用什么方式实现,但是毕竟是实现了! 听到这话,也不必做任何评论, 扯远了就离题了. 我相信任何coder都会实现这些功能的.发布这个帖子的目的是分享本人是如何实现一个简单的增/删/改/查.当然能希望帮助到那些还没有动手做的朋友们.有兴趣的话可以模仿这个小程序,多动手自然熟练了,不就是熟能生巧嘛!

先看程序截屏:

1.数据查询页面
该页面包含数据查询及数据显示功能. 输入查询条件,按查询按钮从数据库获取数据,用DataGrid显示出来.
本文重点是实现数据增/删/改/查,所以不注重界面美观. 如需要建议使用DevExpress for .Net组件.里面有靓到眼花的组件.


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


3.解决方案源代码视图
因本人多年开发已习惯于将项目分层,所以整出来3个Project组合成一个Solution.本来只想做成一个EXE文件的.但总觉得良心不安于是分离出两个DLL. 如果您认为是多此一举可以留言砸砖.本人脸皮较厚可以承受.




如果把业务逻辑分离了我们可以分两部分来看待:

1.界面设计及控件状态控制.(如按钮状态)
2.业务代码.(如增/删/改/查操作数据)

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

注意这段代码,另外还有btnEdit,btnCancel等按钮. (状态控制)
ContractedBlock.gif ExpandedBlockStart.gif Code
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  vjsdn_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(
" 没有选择要修改的记录! " );
      }
   }
}
源代码下载请转第2帖
[原创]C# 数据操作窗体实现增/删/改/查(源代码下载) (二)
http://www.vjsdn.com/bbs/bbsTopicDetails.aspx?pid=110101224

转载于:https://www.cnblogs.com/jonnysun/archive/2009/10/12/1581499.html

你可能感兴趣的:([易学原创]C# 数据操作窗体实现增/删/改/查(图)(源代码))