专栏首页魏琼东一步一步教你使用AgileEAS.NET基础类库进行应用开发-WinForm应用篇-实例一个模块(商品字典)

一步一步教你使用AgileEAS.NET基础类库进行应用开发-WinForm应用篇-实例一个模块(商品字典)

        本文是一步一步教你使用AgileEAS.NET基础进行应用开发系统的WinForm应用篇的开篇,从本文起开始大家将看到一个距离真实应用非常接的开发案例。

商品字典管理

         商品字典管理完成产品进销存业务业务中用到的基础信息,产品字典的增加、修改、删除等业务,它不是一个进销存在主体业务,只是用于为主体业务提供基础支持的一个辅助业务。

功能和界面预览

         商品字典管理完成产品进销存业务业务中用到的基础信息,产品字典的增加、修改、删除等业务,它不是一个进销存在主体业务,只是用于为主体业务提供基础支持的一个辅助业务。

字典查询:根据产品编码或者产品名称的拼音简码检索数据库与之匹配的产品字典数据,并且显示的数据列表之上。

查询结果打印:将满足查询的结果打印输出,演示报表的使用。

添加新的产品字典:调用产品字典添加界面向系统中增加一个新的产品字典。

修改现有产品字典:调用产品字典修改界面修改指定的产品字典记录。

删除现有产品字典:删除系统中已经存在的某个产品字典。

代码的重新生成

         现在我们可以来看看如何实现,不过,我们在看这个实现之前先插入一个小插曲,我们来看看我们的数据查询需求,“根据产品编码或者产品名称的拼音简码检索数据库与之匹配的产品字典数据”显然是不满足这个需求的,我们此前定义的数据结构之中没有定义拼音简码,我们现在来增加上,并且修正此前定义的几个bug。

         然后重新生成代码,输出目录选择本解雇方案代码目录,不要选中“生成解雇方案”:

          因为生成的代码采用了分部的的结构,数据层中与数据表、实体定义相关的对象定义信息都保存的项目的Generat目录下的名称带有Generat的代码文件中,而自定义的数据层业务逻辑被保存在项目目录中的不带Generat的代码文件之中,也就是说,当数据对象的定义发生变更并且重新生成代码文件后,不会覆盖我们编写的自定义处理,只覆盖与数据对象定义相关的代码文件,以保护程序员的投资。

实现我们的业务

         对于字典的查询业务处理,我们需要在数据层接口IProductList编写一个数据查询方法void GetProductList(string code)并在SQLServer实现层项目中实现这个定义: 
1  public void GetProductList(string code)
2         {
3             Condition condition = this.CreateCondition();
4             condition.AddElement("CODE", code, ElementType.MatchPrefix);
5             condition.AddElement("PYCODE", code, ElementType.MatchPrefix,ElementCombineType.Or);
6             condition.AddOrderElement("IDN", true);
7  this.Query(condition);
8         }

         UI代码之中增加一个查询结果显示代码:

 1  internal void LoadDictList()
 2         {
 3             IProductList dictList = DALHelper.DALManager.CreateProductList();
 4             dictList.GetProductList(this.tbSeach.Text);
 5 
 6  try
 7             {
 8  this.Cursor = Cursors.WaitCursor;
 9  this.lvInfo.BeginUpdate();
10  this.lvInfo.Tag = dictList;
11  this.lvInfo.Items.Clear();
12  foreach (IProduct dict in dictList.Rows)
13                 {
14                     ListViewItem item = new ListViewItem(new string[] { string.Empty, dict.Code, dict.Name, dict.Spec, dict.Unit,dict.PYCode, dict.Description }, 0);
15                     item.Tag = dict;
16  this.lvInfo.Items.Add(item);
17                 }
18             }
19  finally
20             {
21  this.lvInfo.EndUpdate();
22  this.Cursor = Cursors.Default;
23             }
24         }

       字典的添加与修改处理,我们在UI层中增加如下窗体:

         并增加如下数据显示与写回代码:

 1  public IProduct Product
 2         {
 3  get
 4             {
 5  return this.product;
 6             }
 7  set
 8             {
 9  this.product = value;
10 
11  if (value != null)
12                 {
13  this.DataDisplay();
14                 }
15             }
16         }
17 
18  private void DataDisplay()
19         {
20  this.tbCode.Text = this.Product.Code;
21  this.tbName.Text = this.Product.Name;
22  this.tbSpec.Text = this.Product.Spec;
23  this.tbUnit.Text = this.Product.Unit;
24  this.tbDescription.Text = this.Product.Description;
25  this.tbPYCode.Text = this.Product.PYCode;
26         }
27 
28  bool VerifyInput()
29         {
30  return true;
31         }
32 
33  private void btnOK_Click(object sender, EventArgs e)
34         {
35  if (!this.Validate())
36             {
37  this.closed = -1;
38  return;
39             }
40 
41  try
42             {
43                 IProduct dict = null;
44 
45  if(this.Product == null)
46                 {
47                     dict = DALHelper.DALManager.CreateProduct();
48                     dict.Idn = dict.GetMaxIdn();
49                 }
50  else
51                 {
52                     dict = this.Product;
53                 }
54 
55                 dict.Code = this.tbCode.Text;
56                 dict.Name = this.tbName.Text;
57                 dict.Spec = this.tbSpec.Text;
58                 dict.Unit = this.tbUnit.Text;
59                 dict.Description = this.tbDescription.Text;
60                 dict.PYCode = this.tbPYCode.Text;
61 
62  
63  if(this.Product ==null)
64                 {
65                     dict.Insert() ;//
66  this.Product = dict;
67                 }
68  else
69                     dict.Update();
70 
71  this.closed = 0;
72             }
73  catch(System.Exception exc)
74             {
75                 MessageBox.Show(this, "在保存药品字典时出错,错误:" + exc.Message, "错误提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
76  this.closed = -1;
77             }
78         }

         字典的删除业务,我们安排在当选择某个商品字典之后可以通过工具条或者快捷菜单中的“删除”完成操作,我们来看看其处理代码:

 1  internal void ProductDel()
 2         {
 3  if (this.lvInfo.SelectedItems.Count < 1) return;
 4 
 5  if(MessageBox.Show(this, "是否确认删除所选择的药品字典?", "确认", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2) == DialogResult.No)
 6             {
 7  return;
 8             }
 9 
10  try
11             {
12  
13  foreach(ListViewItem item in this.lvInfo.SelectedItems)
14                 {
15                     IProduct dict = item.Tag as IProduct;
16                     dict.Delete();
17                 }
18 
19  foreach(ListViewItem item in this.lvInfo.SelectedItems)
20                 {
21  this.lvInfo.Items.Remove(item);
22                 }
23             }
24  catch(System.Exception exc)
25             {
26                 MessageBox.Show(this, "在删除药品字典时出错,错误:" + exc.Message, "错误提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
27             }
28         }

我们来编译并且运行这个示例:

           有关本例子所涉及的数据表结构请参考基于AgileEAS.NET平台基础类库进行应用开发-总体说明及数据定义一文,有关数据对象模型定义文件、文档、DDL脚本请下载:http://files.cnblogs.com/eastjade/demo.db.doc.sql.rar,本文完整代码下载:Product.Demo.rar

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 一步一步教你使用AgileEAS.NET基础类库进行应用开发-WinForm应用篇-演示ORM对象与DataGridView的绑定技术-商品字典的另一个实现

    回顾与说明     前面我们把“商品字典”、“商品入库”、“商品库存查询”、“商品入库查询”四个模块已经概括或者详细的演示了一个管理信息系统的典型应用场景,按照...

    魏琼东
  • AgileEAS.NET SOA 中间件平台.Net Socket通信框架-简单例子-实现简单的服务端客户端消息应答

    一、AgileEAS.NET SOA中间件Socket/Tcp框架介绍      在文章AgileEAS.NET SOA 中间件平台Socket/Tcp通信框架...

    魏琼东
  • 一步一步教你使用AgileEAS.NET基础类库进行应用开发-WinForm应用篇-在UI中应用DataUIMapper组件

    系列回顾       WinForm篇我用了一步一步教你使用AgileEAS.NET基础类库进行应用开发-WinForm应用篇-实例一个模块(商品字典)和一步一...

    魏琼东
  • VUE+WebPack游戏设计:欲望都市,构建类RPG游戏的开发

    望月从良
  • 一个灰色APP逆向——初窥千万灰色直播产业

    从大约13年开始, 各大直播平台就如雨后春笋般冒出来, 犹记得当初还经常在午休时看DOTA的直播下饭. 后来不知道什么时候开始不再只是游戏直播, 而是一度刮起了...

    Python知识大全
  • 前端测试题:(解析)关于JS中this关键字的说法,下面错误的是?

    JavaScript 有一套完全不同于其它语言的对 this 的处理机制。在五种不同的情况下 ,this 指向的各不相同。

    舒克
  • 享元模式解读(1)

    本文是基于《javascript设计模式与开发实践》的享元模式相关章节整理实践而出,建议阅读时间为15-25min.

    RobinsonZhang
  • React-实现上拉加载更多

    yuezhongbao
  • 当我开始使用React 时,我希望我知道这些知识

    自2013年5月29日首次发布以来,React.js已经占领了互联网。我和许多其他开发人员将他们的成功归功于这个了不起的框架,这已经不是什么秘密了。

    前端小智@大迁世界
  • vue封装一个简单的div框选时间的组件

    技术需要积累,有时间我把我之前写的还不错的组件都开源出来。并尝试vue和react 两种方式的组件封装。今天简单写下鼠标框选div选中效果的封装吧。

    奋斗蒙

扫码关注云+社区

领取腾讯云代金券