C#开发的MDI架构+Access数据库应用程序(英文版) [FreeDownload]
学习要点
1.C#操作Access数据库,实现增/删/改/查功能
2.实现从Excel导入数据到Access数据库
3.简单的MDI框架实现(学习重点!!!)
4.业务逻辑分层(界面展示层,业务逻辑层,数据访问层)
5.接口应用,创建观察者模式
6.C/S结构的系统框架设计
程序截图:
图1:主窗体
图2:导入XLS文件界面
图3:解决方案
连接Access数据库
![](https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif)
public System.Data.OleDb.OleDbConnection CreateExcelConnection(string excelPath)
{
string connStr = string.Format(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended
Properties=Excel 8.0;", excelPath);
OleDbConnection conn = new OleDbConnection(connStr);
if (conn.State != ConnectionState.Connecting) conn.Open();
return conn;
}
实现从Excel导入数据到Access数据库
![](https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif)
/*
* 易学原创作品,转载请注明出处
* 本文来自易学网www.vjsdn.net 版权所有
*/
public class SelectExcel
{
public static DataTable Select()
{
OpenFileDialog dlg = new OpenFileDialog();
dlg.Filter = "Microsoft Excel File(*.xls)|*.xls";
if (DialogResult.OK == dlg.ShowDialog())
{
DataTable dt = DataProvider.Instance.GetExcelTable(dlg.FileName, "Gumball&Jawbreaker");
return dt;
}
return null;
}
public static void FillData()
{
}
public static DataTable GetSheet(string excelFile)
{
OleDbConnection conn = DataProvider.Instance.CreateExcelConnection(excelFile);
DataTable dt1 = conn.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Tables, null);
conn.Close();
return dt1;
}
}
简单的MDI框架实现
![](https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif)
/// <summary>
/// 工具栏控件接口
/// </summary>
public interface IToolbarRegister : IDisposable
{
void RegisterButton(IList buttons); //注册按钮
void Dispose(); //重置工具栏按钮
IButtonInfo CreateSeperator();//创建分隔按钮,如"|"
/// <summary>
/// 创建工具栏上的按钮.
/// </summary>
/// <param name="name">按钮名称:如btnSave,btnClose</param>
/// <param name="caption">按钮名称</param>
/// <param name="image">按钮图片</param>
/// <param name="size">按钮大小</param>
/// <param name="clickEvent">按钮的Click事件</param>
/// <returns></returns>
IButtonInfo CreateButton(string name, string caption, Bitmap image, Size size, OnButtonClick clickEvent);
}
定义IToolbarRegister接口
定义MDI子窗体的接口
![](https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif)
using System;
using System.Collections.Generic;
using System.Text;
using System.Collections;
/*
* 易学原创作品,转载请注明出处
* 本文来自易学网www.vjsdn.net 版权所有
*/
namespace VJSDN_P2009.Interfaces
{
/// <summary>
/// MDI子窗体的接口
/// </summary>
public interface IMdiChildForm
{
//子窗体的工具栏组件
IToolbarRegister ToolbarRegister { get;set; }
// 注册MDI窗体内的ToolBar.param mdiForm ToolBar管理对象的实例
void RegisterToolBar(IToolbarRegister toolBarRegister);
void RegisterObserver(IObserver[] observers); //注册子窗子观察者
IList Buttons { get;} //返回窗体的按钮
void InitButtons(); //初始化窗体的按钮
bool IsClosing { get;set;} //窗体是否在关闭状态
}
/// <summary>
/// 系统按钮
/// </summary>
public interface ISystemButtons
{
IButtonInfo[] GetSystemButtons();
void DoClose(IButtonInfo button); //关闭窗体
void DoHelp(IButtonInfo button); //打开帮助
}
/// <summary>
/// 支持数据操作的接口
/// </summary>
public interface IDataOperatable
{
IButtonInfo[] GetDataOperatableButtons();
void DoViewContent(IButtonInfo button);//查看数据
void DoAdd(IButtonInfo button);
void DoEdit(IButtonInfo button);
void DoCancel(IButtonInfo button);
void DoSave(IButtonInfo button);
void DoDelete(IButtonInfo button);
}
/// <summary>
/// 支持打印功能的接口
/// </summary>
public interface IPrintableForm
{
IButtonInfo[] GetPrintableButtons();
void DoPreview(IButtonInfo button);
void DoPrint(IButtonInfo button);
}
/// <summary>
/// 支持锁定/解除锁定功能的接口
/// </summary>
public interface ILockableForm
{
IButtonInfo[] GetLockableButtons();
void DoLock(IButtonInfo button);
void DoUnlock(IButtonInfo button);
}
}
定义MDI主窗体接口
![](https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif)
/// <summary>
/// MDI主窗体接口
/// </summary>
public interface IMdiForm
{
IToolbarRegister MdiToolbar { get;set;} //主窗体的工具栏
IObserver[] MdiObservers { get;} //主窗体动态信息观察者
void RegisterMdiButtons(); //注册MDI主窗体的工具栏的按钮
}
MDI主窗体实现
![](https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif)
/*
* 易学原创作品,转载请注明出处
* 本文来自易学网www.vjsdn.net 版权所有
*/
public partial class frmMDI : Form, IMdiForm
{
//主窗体上的按钮工具栏。ToolBar
private IToolbarRegister _MdiToolbar = null;
public frmMDI()
{
InitializeComponent();
DataService.SetupDBPath();
}
private void frmMDI_Load(object sender, EventArgs e)
{
this._MdiToolbar = new ToolStripRegister(this);
this.RegisterMdiButtons();
}
/// <summary>
/// MDI主窗体的工具栏
/// </summary>
public IToolbarRegister MdiToolbar { get { return _MdiToolbar; } set { _MdiToolbar = value; } }
/// <summary>
/// 注册MDI主窗体功能的按钮
/// </summary>
public void RegisterMdiButtons()
{
IList btns = new ArrayList();
btns.Add(this.MdiToolbar.CreateButton("btnHelp", "Help",
global::VJSDN_P2009.Properties.Resources._24_Help, new Size(57, 28), this.DoHelp));
btns.Add(this.MdiToolbar.CreateButton("btnClose", "Close",
global::VJSDN_P2009.Properties.Resources._24_Exit, new Size(57, 28), this.DoClose));
btns.Add(this.MdiToolbar.CreateSeperator());
btns.Add(this.MdiToolbar.CreateButton("btnLilyInput", "Lily Input",
global::VJSDN_P2009.Properties.Resources._24_Edit, new Size(57, 28), this.DoLilyInput));
btns.Add(this.MdiToolbar.CreateButton("btnDavidInput", "David Input",
global::VJSDN_P2009.Properties.Resources._24_Edit, new Size(57, 28), this.DoDavidInput));
btns.Add(this.MdiToolbar.CreateButton("btnWaltInput", "Walt Input",
global::VJSDN_P2009.Properties.Resources._24_Edit, new Size(57, 28), this.DoWaltInput));
btns.Add(this.MdiToolbar.CreateSeperator());
btns.Add(this.MdiToolbar.CreateButton("btnProductInquire", "Product Inquire",
global::VJSDN_P2009.Properties.Resources._24_ViewContent, new Size(57, 28), this.DoInquireProduct));
this.MdiToolbar.RegisterButton(btns);
}
/// <summary>
/// MDI主窗体观察者列表
/// </summary>
public IObserver[] MdiObservers
{
get
{
IObserver[] os = new IObserver[2];
os[0] = new ObserverCloseAllChild(this);
os[1] = new ObserverFormState(this, this.tsFormState);
return os;
}
}
public void DoInquireProduct(IButtonInfo sender)
{
//menuItemLily.PerformClick();
}
public void DoLilyInput(IButtonInfo sender)
{
menuItemLily.PerformClick();
}
public void DoDavidInput(IButtonInfo sender)
{
menuItemDave.PerformClick();
}
public void DoWaltInput(IButtonInfo sender)
{
menuItemWalt.PerformClick();
}
public void DoHelp(IButtonInfo sender)
{
new frmtest().Show();
//new frmAbout().ShowDialog();
}
public void DoClose(IButtonInfo sender)
{
if (Msg.AskQuestion("Exit application?")) this.Close();
}
private void menuChild1_Click(object sender, EventArgs e)
{
}
private void menuAboutMDI_Click(object sender, EventArgs e)
{
new frmAbout().ShowDialog();
}
private void menuURL_Click(object sender, EventArgs e)
{
MdiTools.OpenIE("http://www.vjsdn.net");
}
private void menuItemLily_Click(object sender, EventArgs e)
{
MdiTools.OpenChildForm(this, typeof(frmLilyInput));
}
private void menuItemWalt_Click(object sender, EventArgs e)
{
MdiTools.OpenChildForm(this, typeof(frmWaltInput));
}
private void menuItemDave_Click(object sender, EventArgs e)
{
MdiTools.OpenChildForm(this, typeof(frmDavidInput));
}
}