您的位置:首页 > 编程语言 > C#

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

2009-10-12 09:15 579 查看
转自C#易学论坛
http://www.vjsdn.com/bbs/bbsTopicDetails.aspx?pid=110101223

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

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

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

先看程序截屏:

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

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: