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

简介: 5.使用ADO.NET实现(三层架构篇-使用List传递数据)(2)   作者:夏春涛 xchunta@163.com 转载请注明来源:http://www.cnblogs.com/SummerRain/archive/2012/07/26/2610957.

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

 

作者:夏春涛 xchunta@163.com

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

 

5.4 界面层HomeShop.WinForm

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

 

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

 

 

目录
相关文章
|
2月前
|
数据采集 数据库 Python
有哪些方法可以验证用户输入数据的格式是否符合数据库的要求?
有哪些方法可以验证用户输入数据的格式是否符合数据库的要求?
163 75
|
3天前
|
设计模式 机器学习/深度学习 前端开发
Python 高级编程与实战:深入理解设计模式与软件架构
本文深入探讨了Python中的设计模式与软件架构,涵盖单例、工厂、观察者模式及MVC、微服务架构,并通过实战项目如插件系统和Web应用帮助读者掌握这些技术。文章提供了代码示例,便于理解和实践。最后推荐了进一步学习的资源,助力提升Python编程技能。
|
25天前
|
存储 数据采集 人工智能
AllData数据中台架构全览:数据时代的智慧中枢
杭州奥零数据科技有限公司成立于2023年,专注于数据中台业务,维护开源项目AllData并提供商业版解决方案。AllData提供数据集成、存储、开发、治理及BI展示等一站式服务,支持AI大模型应用,助力企业高效利用数据价值。
|
2天前
|
机器学习/深度学习 设计模式 API
Python 高级编程与实战:构建微服务架构
本文深入探讨了 Python 中的微服务架构,介绍了 Flask、FastAPI 和 Nameko 三个常用框架,并通过实战项目帮助读者掌握这些技术。每个框架都提供了构建微服务的示例代码,包括简单的 API 接口实现。通过学习本文,读者将能够使用 Python 构建高效、独立的微服务。
|
10天前
|
存储 监控 算法
公司监控上网软件架构:基于 C++ 链表算法的数据关联机制探讨
在数字化办公时代,公司监控上网软件成为企业管理网络资源和保障信息安全的关键工具。本文深入剖析C++中的链表数据结构及其在该软件中的应用。链表通过节点存储网络访问记录,具备高效插入、删除操作及节省内存的优势,助力企业实时追踪员工上网行为,提升运营效率并降低安全风险。示例代码展示了如何用C++实现链表记录上网行为,并模拟发送至服务器。链表为公司监控上网软件提供了灵活高效的数据管理方式,但实际开发还需考虑安全性、隐私保护等多方面因素。
17 0
公司监控上网软件架构:基于 C++ 链表算法的数据关联机制探讨
|
11天前
|
SQL 数据建模 BI
【YashanDB 知识库】用 yasldr 配置 Bulkload 模式作单线程迁移 300G 的业务数据到分布式数据库,迁移任务频繁出错
问题描述 详细版本:YashanDB Server Enterprise Edition Release 23.2.4.100 x86_64 6db1237 影响范围: 离线数据迁移场景,影响业务数据入库。 外场将部分 NewCIS 的报表业务放到分布式数据库,验证 SQL 性能水平。 操作系统环境配置: 125G 内存 32C CPU 2T 的 HDD 磁盘 问题出现的步骤/操作: 1、部署崖山分布式数据库 1mm 1cn 3dn 单线启动 yasldr 数据迁移任务,设置 32 线程的 bulk load 模式 2、观察 yasldr.log 是否出现如下错
|
15天前
|
JSON Java 关系型数据库
Hutool创建数据源工厂动态查询不同数据库不同数据表的数据
Hutool创建数据源工厂动态查询不同数据库不同数据表的数据
30 2
|
2月前
|
开发框架 前端开发 .NET
一个适用于 .NET 的开源整洁架构项目模板
一个适用于 .NET 的开源整洁架构项目模板
65 26
|
3月前
|
SQL 存储 运维
从建模到运维:联犀如何完美融入时序数据库 TDengine 实现物联网数据流畅管理
本篇文章是“2024,我想和 TDengine 谈谈”征文活动的三等奖作品。文章从一个具体的业务场景出发,分析了企业在面对海量时序数据时的挑战,并提出了利用 TDengine 高效处理和存储数据的方法,帮助企业解决在数据采集、存储、分析等方面的痛点。通过这篇文章,作者不仅展示了自己对数据处理技术的理解,还进一步阐释了时序数据库在行业中的潜力与应用价值,为读者提供了很多实际的操作思路和技术选型的参考。
67 1
|
3月前
|
存储 Java easyexcel
招行面试:100万级别数据的Excel,如何秒级导入到数据库?
本文由40岁老架构师尼恩撰写,分享了应对招商银行Java后端面试绝命12题的经验。文章详细介绍了如何通过系统化准备,在面试中展示强大的技术实力。针对百万级数据的Excel导入难题,尼恩推荐使用阿里巴巴开源的EasyExcel框架,并结合高性能分片读取、Disruptor队列缓冲和高并发批量写入的架构方案,实现高效的数据处理。此外,文章还提供了完整的代码示例和配置说明,帮助读者快速掌握相关技能。建议读者参考《尼恩Java面试宝典PDF》进行系统化刷题,提升面试竞争力。关注公众号【技术自由圈】可获取更多技术资源和指导。

热门文章

最新文章