EnterpriseFrameWork框架实例源代码下载: 实例下载

上一章讲解了开发Web系统的详细步骤,以书籍的管理作实例实现对书籍的增、删、改、查功能,本章接着上面的实例继续补充用Winform界面来实现此功能;

本文要点:

1.Winform版界面效果

2.Winform项目开发步骤

3.代码文件调用关系图

4.常见问题汇总

1.界面效果如下:

解决方案目录结构:

2.上图红色部分为这次新增加的文件,开发步骤:

      1)新增Winform控制器,bookwinController.cs

      2)新增界面接口,IfrmBook.cs

      3)新增界面窗口,frmBookManager.cs

其中实体Book.cs和Dao在上一章实例中已经完成,所以直接调用就行了;

bookwinController.cs文件

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using EFWCoreLib.WinformFrame.Controller;
using Books.WinController.Iviewform;
using Books.Dao;
using System.Data;
using Books.Entity; namespace Books.WinController
{
[EFWCoreLib.WinformFrame.Controller.Menu]//与系统菜单对应
[View(DllName = "Books.Winform.dll", ViewTypeName = "Books.Winform.Viewform.frmBookManager", DefaultView = true)]
public class bookwinController : BaseController
{
IfrmBook frmBook;
public override void Init()
{
frmBook = (IfrmBook)DefaultView;
//初始化加载书籍目录
GetBooks();
} //获取书籍目录
public void GetBooks()
{
BookDao bdao = NewDao<BookDao>();
DataTable dt = bdao.GetBooks("", );
frmBook.loadbooks(dt);
}
//界面点击新增
public Book newbook()
{
return NewObject<Book>();
}
//保存
public void bookSave()
{
frmBook.currBook.save();
GetBooks();
}
}
}

bookwinController类必须继承框架中的BaseController对象,还必须配置自定义标签【Menu】和【View】对应菜单和界面对象,控制器中的方法实现界面操作功能;Winform系统开发的真正难点应该就在对于控制器的理解,系统菜单是怎么跟界面关联起来的?界面与控制器直接的交互又是怎么实现的?这些问题我们放在后面章节中详细讲解,本章先学会怎么使用;

IfrmBook.cs文件

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using EFWCoreLib.WinformFrame.Controller;
using System.Data;
using Books.Entity; namespace Books.WinController.Iviewform
{
public interface IfrmBook : IBaseView
{
//给网格加载数据
void loadbooks(DataTable dt);
//当前维护的书籍
Book currBook { get; set; }
}
}

IfrmBook接口被界面对象frmBookManager所继承,它把界面对象所要交互的数据用接口隔离,这样控制器无需直接操作界面对象frmBookManager,只需依赖IfrmBook接口就行了,实现界面与后台的解耦,当然这种MVC模式不仅仅只是解耦的目的,而是一种新的开发Winform项目的方法,一切业务实现是围绕控制器进行,而不是界面;因为一个界面并不能展现一个完整的功能或者一个界面包含了多个完整功能,因为界面的设计更多来于用户的操作友好性;所以业务集中在控制器中,对于我们理解代码、扩展以及以后得维护都带来很多好处,以后章节详细讨论

frmBookManager.cs文件

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using EFWCoreLib.WinformFrame.CustomControl;
using Books.WinController.Iviewform;
using Books.Entity; namespace Books.Winform.Viewform
{
public partial class frmBookManager : BaseForm, IfrmBook
{
public frmBookManager()
{
InitializeComponent(); frmForm.AddItem(txtbookname, "BookName","必须输入书籍名称!");
frmForm.AddItem(txtprice, "BuyPrice");
frmForm.AddItem(txtdate, "BuyDate");
frmForm.AddItem(ckflag, "Flag"); txtdate.Value = DateTime.Now;
} #region IfrmBook 成员 public void loadbooks(DataTable dt)
{
gridBook.DataSource = dt;
} private Book _book;
public Books.Entity.Book currBook
{
get
{
frmForm.GetValue<Book>(_book);
return _book;
}
set
{
_book = value;
frmForm.Load<Book>(_book);
}
} #endregion
//选择书籍
private void gridBook_Click(object sender, EventArgs e)
{
if (gridBook.CurrentCell != null)
{
int rowindex = gridBook.CurrentCell.RowIndex;
DataTable dt = (DataTable)gridBook.DataSource;
int Id = Convert.ToInt32(dt.Rows[rowindex]["Id"]);
_book = InvokeController("newbook") as Book;
_book.Id = Id;
//取出网格数据赋值给控件
frmForm.Load(dt.Rows[rowindex]);
}
}
//新增
private void btnadd_Click(object sender, EventArgs e)
{
//清空右边面板控件数据
currBook = InvokeController("newbook") as Book;
}
//保存
private void btnsave_Click(object sender, EventArgs e)
{
if (frmForm.Validate())
{
InvokeController("bookSave");
}
}
}
}

界面对象frmBookManager必须继承框架中的BaseForm对象和上面的IfrmBook接口,界面的控件是第三方控件NotNetBar,总的来说还是比较美观的;还有界面中用到了两个自定义控件,DataGrid和frmForm以后会详细介绍其功能;

      InvokeController("bookSave");调用控制器中的bookSave方法,所有对控制器的调用都是通过InvokeController委托来实现;

      还有一点就是注意,界面代码中的操作事件,“新增”、“保存”里面的代码都非常简单,只是向控制器发送一个消息;

      比如:点击“保存”成功后,一般都会要重新加载网格的数据,这段代码无需写在保存之后,而是控制器实现了此功能,

      这说明什么,说明界面上的一些数据联动都可以由控制器来控制,这要省了界面上多少代码,界面代码变得无比的干净明了,我想你肯定没有看到过如此简洁的代码,这就是我一直坚持的;

当一个非常复杂的界面,如果改造成这种方式,界面代码至少可以减少一半,1万行的代码最后几千行不到就可以搞定,而且大量减少了全局变量的存在;

这个方式真的只有使用过之后就能感觉到这种味道。。。

3.最后我们看下图,整理一下以上代码文件的调用关系

EnterpriseFrameWork框架实例源代码下载: 实例下载

三、利用EnterpriseFrameWork快速开发Winform系统(C/S)的更多相关文章

  1. 二、利用EnterpriseFrameWork快速开发Web系统(B/S)

    EnterpriseFrameWork框架实例源代码下载: 实例下载 本章通过一个开发实例来讲解Web系统的开发经过,以及会碰到的一些问题.实例功能就是业务系统中最常见的增.删.改.查来演示,用一个界 ...

  2. 四、利用EnterpriseFrameWork快速开发基于WCF为中间件的三层结构系统

    回<[开源]EnterpriseFrameWork框架系列文章索引> EnterpriseFrameWork框架实例源代码下载: 实例下载 本章内容与上一张<利用Enterprise ...

  3. 五、利用EnterpriseFrameWork快速开发基于WebServices的接口

    回<[开源]EnterpriseFrameWork框架系列文章索引> EnterpriseFrameWork框架实例源代码下载: 实例下载 前面几章已完成EnterpriseFrameWo ...

  4. 如何快速开发Winform应用系统

    在实际的业务中,往往还有很多需要使用Winform来开发应用系统的,如一些HIS.MIS.MES等系统,由于Winform开发出来的系统界面友好,响应快速,开发效率高等各方面原因,还有一些原因是独立的 ...

  5. 开发者如何利用工具快速开发出完美APP

    文|移动互联网李建华 微信:ydhlwdyq 传统的个人开发者,要想开发出一个完美的APP要 经过以下几个过程:搭建开发环境,写代码,写统计系统,开发即将完成后,要购买服务器,然后把程序布置到服务器上 ...

  6. DSkin 的WebUI开发模式介绍,Html快速开发Winform的UI

    新版WebUI开发模式采用MiniBlink内核,这个内核功能更完善,dll压缩之后才5M,而且提供开发者功能,内核还在更新中,而且是开源项目:https://github.com/weolar/mi ...

  7. UWP简单示例(三):快速开发2D游戏引擎

    准备 IDE:Visual Studio 图形 API:Win2D MSDN 教程:UWP游戏开发 游戏开发涉及哪些技术? 游戏开发是一门复杂的艺术,编码方面你需要考虑图形.输入和网络 以及相对独立的 ...

  8. java 利用JAX-RS快速开发RESTful 服务

    JAX-RS(Java API for RESTful Web Services)同样也是JSR的一部分,详细规范定义见 https://jcp.org/en/jsr/detail?id=311 .从 ...

  9. java_java 利用JAX-RS快速开发RESTful 服务

    JAX-RS(Java API for RESTful Web Services)同样也是JSR的一部分,详细规范定义见 https://jcp.org/en/jsr/detail?id=311 .从 ...

随机推荐

  1. 【nodejs】学习笔记

    学习链接:http://www.cnblogs.com/zhongweiv/p/nodejs_environment.html (一)简介及环境安装 Node.js是让Javascript脱离浏览器运 ...

  2. 【CSS3】自定义滚动条样式 -webkit-scrollbar

    好文推荐:http://m.blog.csdn.net/article/details?id=40398177 http://www.xuanfengge.com/css3-webkit-scroll ...

  3. Selenium自动化测试之数据驱动及用例管理

    Selenium自动化测试之数据驱动及用例管理 一.TestNg注解介绍 @Test:表示一个测试方法,在运行测试用例过程中,会自动运行@Test注解的方法. 例:

  4. 用 S5PV210 学习 Linux (三) SD卡下载

    学习地址:http://edu.51cto.com/lesson/id-63015.html http://blog.csdn.net/karven_/article/details/52015325 ...

  5. useradd添加用户

    sudo useradd -m -s /bin/bash $user sudo passwd $user linux useradd/userdel 命令 转自:http://hi.baidu.com ...

  6. iOS中UITextField常用设置和方法

    //初始化textField并设置位置及大小 UITextField *text = [[UITextField alloc]initWithFrame:CGRectMake(, , , )]; // ...

  7. 有关dubbo面试的那些事儿

    dubbo是什么 dubbo是一个分布式框架,远程服务调用的分布式框架,其核心部分包含: 集群容错:提供基于接口方法的透明远程过程调用,包括多协议支持,以及软负载均衡,失败容错,地址路由,动态配置等集 ...

  8. Windows Redis 取消保护模式C#进行访问

    运行redis服务程序和客户端程序设置即可. config set protected-mode “no”

  9. Hadoop(二)CentOS7.5搭建Hadoop2.7.6完全分布式集群

    一 完全分布式集群(单点) Hadoop官方地址:http://hadoop.apache.org/ 1  准备3台客户机 1.1防火墙,静态IP,主机名 关闭防火墙,设置静态IP,主机名此处略,参考 ...

  10. 从零开始一个http服务器(六)-多路复用和压力测试

    从零开始一个http服务器(六)-多路复用和压力测试 代码地址 : https://github.com/flamedancer/cserver git checkout step6 运行: make ...