.NET数据库编程求索之路--4.使用ADO.NET实现(三层架构篇-使用Table传递数据)(5)

本文涉及的产品
数据可视化 DataV(企业版),20 个大屏 1 个月
可视分析地图(DataV-Atlas),3 个项目,100M 存储空间
简介: 4.使用ADO.NET实现(三层架构篇-使用Table传递数据)(5)     作者:夏春涛 xchunta@163.com 转载请注明来源:http://www.cnblogs.com/SummerRain/archive/2012/07/25/2609166.

4.使用ADO.NET实现(三层架构篇-使用Table传递数据)(5)

 

 

作者:夏春涛 xchunta@163.com

转载请注明来源:http://www.cnblogs.com/SummerRain/archive/2012/07/25/2609166.html 

 

4.6 界面层HomeShop.WinForm

 

 

App.config

<? xml version="1.0" encoding="utf-8"  ?>
< configuration >
   < connectionStrings >
     < add  name ="HomeShop"  connectionString ="Data Source=(local);Initial Catalog=HomeShop;Integrated Security=SSPI;"   />
   </ connectionStrings >
</ configuration >

 

 

FormMain.cs

  1  using System;
  2  using System.Collections.Generic;
  3  using System.ComponentModel;
  4  using System.Data;
  5  using System.Drawing;
  6  using System.Linq;
  7  using System.Text;
  8  using System.Windows.Forms;
  9  // 新添命名空间
 10  using HomeShop.BLL;
 11 
 12  namespace HomeShop.WinForm
 13 {
 14      // 功能:订单管理系统-主界面窗体;
 15       // 作者:夏春涛;
 16       // 日期:2011-11-30;
 17       public  partial  class FormMain : Form
 18     {
 19          // Order业务逻辑对象
 20           private OrderBiz orderBiz =  new OrderBiz();
 21 
 22          // 【窗体构造函数】
 23           public FormMain()
 24         {
 25             InitializeComponent();            
 26         }
 27 
 28          // 【窗体加载事件】
 29           private  void FormMain_Load( object sender, EventArgs e)
 30         {   
 31             gridView.AutoGenerateColumns =  false; // 禁止DataGridView控件自动生成列         
 32              BindData_Orders(); // 绑定订单列表
 33          }
 34 
 35          // 绑定订单列表
 36           private  void BindData_Orders()
 37         {
 38             txtCustomerName.Clear();
 39             DataView dataView = orderBiz.GetTable().DefaultView;
 40             gridView.DataSource = dataView;
 41             labRecordCount.Text =  " 共  " + dataView.Table.Rows.Count.ToString() +  "  条记录 ";
 42         }
 43 
 44          // 【查询】订单
 45           private  void btnQuery_Click( object sender, EventArgs e)
 46         {
 47              if ( "" == txtCustomerName.Text.Trim())
 48             {
 49                 MessageBox.Show( this" 请输入要查询的顾客姓名关键词! "" 提示 "
 50                                 MessageBoxButtons.OK, MessageBoxIcon.Information);
 51                 txtCustomerName.Focus();
 52                  return;
 53             }            
 54             DataView dataView = orderBiz.GetTable(txtCustomerName.Text.Trim()).DefaultView;
 55             gridView.DataSource = dataView;
 56             labRecordCount.Text =  " 共  " + dataView.Table.Rows.Count.ToString() +  "  条记录 ";
 57         }
 58 
 59          // 【全部显示】订单
 60           private  void btnShowAll_Click( object sender, EventArgs e)
 61         {
 62             BindData_Orders();
 63         }
 64 
 65          // 【新增】订单
 66           private  void menuAdd_Click( object sender, EventArgs e)
 67         {
 68             FormEdit formEdit =  new FormEdit();
 69             DialogResult dlgResult = formEdit.ShowDialog( this); // 显示为模式对话框
 70               if (DialogResult.OK == dlgResult)
 71             {
 72                 BindData_Orders(); // 重新绑定订单列表
 73              }
 74             formEdit.Dispose(); // 释放窗体资源
 75          }
 76 
 77          // 【修改】订单
 78           private  void menuUpdate_Click( object sender, EventArgs e)
 79         {
 80              if (gridView.RowCount ==  0return;
 81 
 82              int selectedRowIndex = gridView.SelectedRows[ 0].Index;
 83              int selectedOrderID = ( int)gridView.SelectedRows[ 0].Cells[ " Col_OrderID "].Value;
 84             FormEdit formEdit =  new FormEdit(selectedOrderID);
 85             DialogResult dlgResult = formEdit.ShowDialog( this); // 显示为模式对话框
 86               if (DialogResult.OK == dlgResult)
 87             {
 88                 BindData_Orders(); // 重新绑定订单列表
 89                  gridView.Rows[selectedRowIndex].Selected =  true; // 依然选中当前行
 90              }
 91             formEdit.Dispose(); // 释放窗体资源
 92          }
 93 
 94          // 【删除】订单
 95           private  void menuDelete_Click( object sender, EventArgs e)
 96         {
 97              if (gridView.RowCount ==  0return;
 98 
 99              int selectedRowIndex = gridView.SelectedRows[ 0].Index;
100              int selectedOrderID = ( int)gridView.SelectedRows[ 0].Cells[ " Col_OrderID "].Value;
101             DialogResult dlgResult = MessageBox.Show( this" 确认要删除选中的订单吗? "" 提示 "
102                                                      MessageBoxButtons.YesNo, MessageBoxIcon.Question);
103              if (DialogResult.Yes == dlgResult)
104             {
105                 orderBiz.Delete(selectedOrderID); // 删除订单
106                  BindData_Orders(); // 重新绑定订单列表
107                   // 选中下一条记录
108                   if (selectedRowIndex > gridView.Rows.Count -  1)
109                     selectedRowIndex = gridView.Rows.Count -  1;
110                  if (selectedRowIndex >=  0)
111                 {
112                     gridView.Rows[selectedRowIndex].Selected =  true;
113                 }
114             }         
115         }
116 
117         
118     }
119 }

 

FormEdit.cs

  1  using System;
  2  using System.Collections.Generic;
  3  using System.ComponentModel;
  4  using System.Data;
  5  using System.Drawing;
  6  using System.Linq;
  7  using System.Text;
  8  using System.Windows.Forms;
  9  // 新添命名空间
 10  using System.Configuration;
 11  using HomeShop.Model;
 12  using HomeShop.BLL;
 13 
 14  namespace HomeShop.WinForm
 15 {
 16      // 功能:订单管理系统-新增/修改订单窗体;
 17       // 作者:夏春涛;
 18       // 日期:2011-11-30;
 19       public  partial  class FormEdit : Form
 20     {
 21          // Order业务逻辑对象
 22           private OrderBiz orderBiz =  new OrderBiz();
 23          // 当前订单对象
 24           private Order order =  new Order();
 25 
 26          // 临时ID,起始值为0,自动递减(避免与正常的正整数ID重复)
 27           private  int tempID =  0;
 28 
 29          // 【窗体构造函数】
 30           public FormEdit()
 31         {
 32             InitializeComponent();
 33              // ----
 34               this.Text =  " 新增订单 "; // 窗体标题            
 35          }
 36 
 37          // 【窗体构造函数】-重载,入参:要修改的订单的ID
 38           public FormEdit( int orderID)
 39         {
 40             InitializeComponent();
 41              // ----
 42               this.Text =  " 修改订单 "; // 窗体标题 
 43               this.order = orderBiz.GetSingle(orderID);             
 44         }
 45 
 46          // 【窗体加载事件】-初始化控件的内容
 47           private  void FormEdit_Load( object sender, EventArgs e)
 48         {
 49             gridView.AutoGenerateColumns =  false; // 禁止DataGridView控件自动生成列                     
 50              InitOrderState(); // 初始化订单状态下拉框            
 51              InitOrderInfo(); // 初始化订单信息
 52          }
 53 
 54          // 初始化订单状态下拉框
 55           private  void InitOrderState()
 56         {
 57              // 从数据库获取订单状态数据 
 58              OrderStateBiz orderStateBiz =  new OrderStateBiz();
 59             DataView dataView = orderStateBiz.GetTable().DefaultView;
 60              // 将数据绑定到订单状态下拉框
 61              OrderState.ValueMember =  " Code ";
 62             OrderState.DisplayMember =  " Name ";
 63             OrderState.DataSource = dataView;
 64         }
 65 
 66          // 初始化订单基本信息
 67           private  void InitOrderInfo()
 68         {
 69              // 将当前订单基本信息显示在编辑区
 70              OrderID.Text = order.OrderID.ToString();
 71             CustomerName.Text = order.CustomerName;
 72             CustomerPhoneNo.Text = order.CustomerPhoneNo;
 73             CustomerAddress.Text = order.CustomerAddress;
 74             OrderTime.Value = order.OrderTime;
 75             OrderState.SelectedValue = order.OrderStateCode;
 76             OrderTotal.Text = order.OrderTotal.ToString(); // 获取订单总金额
 77               // 初始化当前订单关联的商品列表
 78              gridView.DataSource = order.OrderItems;
 79         }
 80    
 81          // 【新增】商品
 82           private  void btnProductAdd_Click( object sender, EventArgs e)
 83         {
 84              if (!ValidateInput_Product())  return;
 85 
 86             OrderItem orderItem =  new OrderItem();
 87             orderItem.OrderID =  this.order.OrderID;
 88             orderItem.OrderItemID = tempID--;
 89             orderItem.Product = Product.Text.Trim();
 90             orderItem.UnitPrice = Convert.ToDecimal(UnitPrice.Text.Replace( "   """));
 91             orderItem.Quantity = Convert.ToInt32(Quantity.Text.Replace( "   """));
 92              this.order.OrderItems.Add(orderItem);
 93             
 94             gridView.DataSource =  new List<OrderItem>();
 95             gridView.DataSource =  this.order.OrderItems;
 96             OrderTotal.Text =  this.order.OrderTotal.ToString();
 97             gridView.Rows[gridView.Rows.Count -  1].Selected =  true;
 98         }
 99 
100          // 验证用户输入-新增/修改商品信息时
101           private  bool ValidateInput_Product()
102         {
103              // 验证商品名称
104               if ( "" == Product.Text.Trim())
105             {
106                 MessageBox.Show( this" 请输入商品名称! "" 提示 ",
107                                 MessageBoxButtons.OK, MessageBoxIcon.Information);
108                 Product.Focus();
109                  return  false;
110             }
111              // 验证商品单价            
112               try
113             {
114                  string regexString =  @" ^[0-9]*[0-9]+[\.]*[0-9]*$ "; // 正则表达式-非负数
115                  RegexStringValidator validator =  new RegexStringValidator(regexString);
116                 validator.Validate(UnitPrice.Text.Replace( "   """));
117             }
118              catch
119             {
120                 MessageBox.Show( this" 请输入正确的商品单价(非负数)! "" 提示 ",
121                                 MessageBoxButtons.OK, MessageBoxIcon.Information);
122                 UnitPrice.Focus();
123                  return  false;
124             }
125              // 验证商品数量            
126               try
127             {
128                  string regexString =  @" ^[0-9]*[1-9][0-9]*$ "; // 正则表达式-正整数
129                  RegexStringValidator validator =  new RegexStringValidator(regexString);
130                 validator.Validate(Quantity.Text.Replace( "   """));
131             }
132              catch
133             {
134                 MessageBox.Show( this" 请输入正确的商品数量(正整数)! "" 提示 ",
135                                 MessageBoxButtons.OK, MessageBoxIcon.Information);
136                 Quantity.Focus();
137                  return  false;
138             }
139 
140              return  true;
141         }
142 
143          // 【修改】选中的商品
144           private  void btnProductUpdate_Click( object sender, EventArgs e)
145         {
146              if (gridView.RowCount ==  0return;
147              if (!ValidateInput_Product())  return;
148 
149              int selectedRowIndex = gridView.SelectedRows[ 0].Index;
150 
151              int orderItemID = ( int)gridView.Rows[selectedRowIndex].Cells[ " Col_OrderItemID "].Value;
152             OrderItem orderItem =  this.order.OrderItems.Find(
153                                        delegate(OrderItem item){  return item.OrderItemID == orderItemID; });            
154             orderItem.Product = Product.Text.Trim();
155             orderItem.UnitPrice = Convert.ToDecimal(UnitPrice.Text.Replace( "   """));
156             orderItem.Quantity = Convert.ToInt32(Quantity.Text.Replace( "   """));
157 
158             gridView.DataSource =  new List<OrderItem>();
159             gridView.DataSource =  this.order.OrderItems;
160             OrderTotal.Text =  this.order.OrderTotal.ToString();
161             gridView.Rows[selectedRowIndex].Selected =  true;
162         }
163 
164          // 【删除】选中的商品
165           private  void btnProductDelete_Click( object sender, EventArgs e)
166         {
167              if (gridView.RowCount ==  0return;            
168             
169             DialogResult dlgResult = MessageBox.Show( this" 确认要删除选中的商品吗? "" 提示 "
170                                                 MessageBoxButtons.YesNo, MessageBoxIcon.Question);
171              if (DialogResult.Yes == dlgResult)
172             {
173                  int selectedRowIndex = gridView.SelectedRows[ 0].Index; 
174                 
175                  int orderItemID = ( int)gridView.SelectedRows[ 0].Cells[ " Col_OrderItemID "].Value;
176                 OrderItem orderItem =  this.order.OrderItems.Find(
177                                            delegate(OrderItem item){  return item.OrderItemID == orderItemID; });
178                  this.order.OrderItems.Remove(orderItem);
179 
180                 gridView.DataSource =  new List<OrderItem>();
181                 gridView.DataSource =  this.order.OrderItems;
182                 OrderTotal.Text =  this.order.OrderTotal.ToString();
183                  // 选中下一条记录
184                   if (selectedRowIndex > gridView.Rows.Count -  1)
185                     selectedRowIndex = gridView.Rows.Count -  1;
186                  if (selectedRowIndex >=  0)
187                 {
188                     gridView.Rows[selectedRowIndex].Selected =  true;
189                     ShowSelectedRowInfo(); // 将选中的商品信息显示在编辑区
190                  }
191             }
192         }
193 
194          // 【选择更改事件】-将选中的商品信息显示在编辑区
195           private  void gridView_SelectionChanged( object sender, EventArgs e)
196         {
197             ShowSelectedRowInfo();
198         }
199 
200          // 将选中的商品信息显示在编辑区
201           private  void ShowSelectedRowInfo()
202         {
203              if (gridView.SelectedRows.Count ==  0return;
204             Product.Text = gridView.SelectedRows[ 0].Cells[ " Col_Product "].Value.ToString();
205             UnitPrice.Text = gridView.SelectedRows[ 0].Cells[ " Col_UnitPrice "].Value.ToString();
206             Quantity.Text = gridView.SelectedRows[ 0].Cells[ " Col_Quantity "].Value.ToString();
207         }        
208 
209          // 【确定】-保存新增/修改的订单
210           private  void btnOK_Click( object sender, EventArgs e)
211         {
212              if (!ValidateInput_Order())  return; // 验证用户输入
213 
214             order.OrderStateCode = OrderState.SelectedValue.ToString();
215             order.OrderTime = OrderTime.Value;
216             order.CustomerAddress = CustomerAddress.Text.Trim();
217             order.CustomerName = CustomerName.Text.Trim();
218             order.CustomerPhoneNo = CustomerPhoneNo.Text.Trim();
219 
220              if ( 0 ==  this.order.OrderID) // 新增订单
221              {
222                 orderBiz.Add( this.order);
223                 MessageBox.Show( this" 新增订单成功! "" 提示 ",
224                     MessageBoxButtons.OK, MessageBoxIcon.Information);
225             }
226              else  // 修改订单
227              {
228                 orderBiz.Update( this.order);
229                 MessageBox.Show( this" 修改订单成功! "" 提示 ",
230                     MessageBoxButtons.OK, MessageBoxIcon.Information);
231             }
232 
233              this.DialogResult = DialogResult.OK; // 设置对话框结果
234               this.Close(); // 关闭窗体
235          }
236 
237          // 验证用户输入-保存新增/修改的订单时
238           private  bool ValidateInput_Order()
239         {
240              // 验证顾客姓名
241               if ( "" == CustomerName.Text.Trim())
242             {
243                 MessageBox.Show( this" 请输入顾客姓名! "" 提示 ",
244                                 MessageBoxButtons.OK, MessageBoxIcon.Information);
245                 CustomerName.Focus();
246                  return  false;
247             }
248              // 验证联系电话
249               if ( "" == CustomerPhoneNo.Text.Trim())
250             {
251                 MessageBox.Show( this" 请输入联系电话! "" 提示 ",
252                                 MessageBoxButtons.OK, MessageBoxIcon.Information);
253                 CustomerPhoneNo.Focus();
254                  return  false;
255             }
256              // 订购商品信息
257               if ( 0 == gridView.Rows.Count)
258             {
259                 MessageBox.Show( this" 请输入订购商品信息! "" 提示 ",
260                                 MessageBoxButtons.OK, MessageBoxIcon.Information);
261                 Product.Focus();
262                  return  false;
263             }
264 
265              return  true;
266         }
267         
268          // 【取消】-关闭窗体
269           private  void btnCancel_Click( object sender, EventArgs e)
270         {
271              this.Close(); // 关闭窗体
272          }
273     }
274 }

 

 

数据库文件:/Files/SummerRain/NetDbDevRoad/HomeShopDB.rar

完整源代码:/Files/SummerRain/NetDbDevRoad/4使用ADONET实现三层架构Table.rar

 

 

相关实践学习
DataV Board用户界面概览
本实验带领用户熟悉DataV Board这款可视化产品的用户界面
阿里云实时数仓实战 - 项目介绍及架构设计
课程简介 1)学习搭建一个数据仓库的过程,理解数据在整个数仓架构的从采集、存储、计算、输出、展示的整个业务流程。 2)整个数仓体系完全搭建在阿里云架构上,理解并学会运用各个服务组件,了解各个组件之间如何配合联动。 3&nbsp;)前置知识要求 &nbsp; 课程大纲 第一章&nbsp;了解数据仓库概念 初步了解数据仓库是干什么的 第二章&nbsp;按照企业开发的标准去搭建一个数据仓库 数据仓库的需求是什么 架构 怎么选型怎么购买服务器 第三章&nbsp;数据生成模块 用户形成数据的一个准备 按照企业的标准,准备了十一张用户行为表 方便使用 第四章&nbsp;采集模块的搭建 购买阿里云服务器 安装 JDK 安装 Flume 第五章&nbsp;用户行为数据仓库 严格按照企业的标准开发 第六章&nbsp;搭建业务数仓理论基础和对表的分类同步 第七章&nbsp;业务数仓的搭建&nbsp; 业务行为数仓效果图&nbsp;&nbsp;
目录
相关文章
|
7天前
|
存储 数据采集 人工智能
AllData数据中台架构全览:数据时代的智慧中枢
杭州奥零数据科技有限公司成立于2023年,专注于数据中台业务,维护开源项目AllData并提供商业版解决方案。AllData提供数据集成、存储、开发、治理及BI展示等一站式服务,支持AI大模型应用,助力企业高效利用数据价值。
|
3月前
|
消息中间件 存储 缓存
十万订单每秒热点数据架构优化实践深度解析
【11月更文挑战第20天】随着互联网技术的飞速发展,电子商务平台在高峰时段需要处理海量订单,这对系统的性能、稳定性和扩展性提出了极高的要求。尤其是在“双十一”、“618”等大型促销活动中,每秒需要处理数万甚至数十万笔订单,这对系统的热点数据处理能力构成了严峻挑战。本文将深入探讨如何优化架构以应对每秒十万订单级别的热点数据处理,从历史背景、功能点、业务场景、底层原理以及使用Java模拟示例等多个维度进行剖析。
81 8
|
3月前
|
存储 分布式计算 数据挖掘
数据架构 ODPS 是什么?
数据架构 ODPS 是什么?
769 7
|
3月前
|
数据采集 搜索推荐 数据管理
数据架构 CDP 是什么?
数据架构 CDP 是什么?
123 2
|
4月前
|
存储 分布式计算 大数据
大数据-145 Apache Kudu 架构解读 Master Table 分区 读写
大数据-145 Apache Kudu 架构解读 Master Table 分区 读写
68 0
|
4月前
|
存储 大数据 数据处理
洞察未来:数据治理中的数据架构新思维
数据治理中的数据架构新思维对于应对未来挑战、提高数据处理效率、加强数据安全与隐私保护以及促进数据驱动的业务创新具有重要意义。企业需要紧跟时代步伐,不断探索和实践新型数据架构,以洞察未来发展趋势,为企业的长远发展奠定坚实基础。
|
5月前
|
存储 搜索推荐 数据库
MarkLogic在微服务架构中的应用:提供服务间通信和数据共享的机制
随着微服务架构的发展,服务间通信和数据共享成为关键挑战。本文介绍MarkLogic数据库在微服务架构中的应用,阐述其多模型支持、索引搜索、事务处理及高可用性等优势,以及如何利用MarkLogic实现数据共享、服务间通信、事件驱动架构和数据分析,提升系统的可伸缩性和可靠性。
73 5
|
6月前
|
Java 数据库连接 微服务
揭秘微服务架构下的数据魔方:Hibernate如何玩转分布式持久化,实现秒级响应的秘密武器?
【8月更文挑战第31天】微服务架构通过将系统拆分成独立服务,提升了可维护性和扩展性,但也带来了数据一致性和事务管理等挑战。Hibernate 作为强大的 ORM 工具,在微服务中发挥关键作用,通过二级缓存和分布式事务支持,简化了对象关系映射,并提供了有效的持久化策略。其二级缓存机制减少数据库访问,提升性能;支持 JTA 保证跨服务事务一致性;乐观锁机制解决并发数据冲突。合理配置 Hibernate 可助力构建高效稳定的分布式系统。
96 0
|
6月前
|
安全 网络安全 数据安全/隐私保护
云原生技术探索:容器化与微服务架构的实践之路网络安全与信息安全:保护数据的关键策略
【8月更文挑战第28天】本文将深入探讨云原生技术的核心概念,包括容器化和微服务架构。我们将通过实际案例和代码示例,展示如何在云平台上实现高效的应用部署和管理。文章不仅提供理论知识,还包含实操指南,帮助开发者理解并应用这些前沿技术。 【8月更文挑战第28天】在数字化时代,网络安全和信息安全是保护个人和企业数据的前线防御。本文将探讨网络安全漏洞的成因、加密技术的应用以及提升安全意识的重要性。文章旨在通过分析网络安全的薄弱环节,介绍如何利用加密技术和提高用户警觉性来构建更为坚固的数据保护屏障。
|
6月前
|
存储 监控 安全
大数据架构设计原则:构建高效、可扩展与安全的数据生态系统
【8月更文挑战第23天】大数据架构设计是一个复杂而系统的工程,需要综合考虑业务需求、技术选型、安全合规等多个方面。遵循上述设计原则,可以帮助企业构建出既高效又安全的大数据生态系统,为业务创新和决策支持提供强有力的支撑。随着技术的不断发展和业务需求的不断变化,持续优化和调整大数据架构也将成为一项持续的工作。

热门文章

最新文章