转自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等按钮. (状态控制)
[原创]C# 数据操作窗体实现增/删/改/查(源代码下载) (二)
http://www.vjsdn.com/bbs/bbsTopicDetails.aspx?pid=110101224
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等按钮. (状态控制)
Code
private void btnAdd_Click(object sender, EventArgs e)
{
_TYPE = OperateType.Add;
this.ShowData(false); //显示数据
this.ShowDetailPage(); //显示数据编辑页面
this.SetEditMode(true); //显示状态为修改模式
}
主窗体源代码.
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帖
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( " 没有选择要修改的记录! " );
}
}
}
[原创]C# 数据操作窗体实现增/删/改/查(源代码下载) (二)
http://www.vjsdn.com/bbs/bbsTopicDetails.aspx?pid=110101224