




已阅读5页,还剩113页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
剖析案例2-1Sales order listview0讲解流程:(1)演示程序功能,见程序操作提示。(2)对“制作订单”窗口的数据环境进行分析,先了解数据库的总体结构,参见05_3练习;再详细查看订单表的结构和记录;掌握前台和后台的概念。一、功能概述程序操作提示 Instructions1进入销售订单,将从“商品窗口”(货物架)将某物品拖到订单项目区。2双击物品图标可以查看或编辑详细信息。3点击鼠标右键改变货物架的显示形式。二、功能的界面与数据1 “制作订单”窗口-前台数据 图1订单窗口与定单表的关系2 订单表-后台数据(订单号,客户号,日期,支付方式,地区,销售代表)idcust_idorder_datefin_code_idregionsales_rep26521742001-5-28r1Central902在订单窗口按“打开货架”出现“货架”窗口3 订货清单表-后台数据(订单号,细目序号,商品号,数量,发货日期)idline_idprod_idquantityship_date26521400362001-5-284 操作控制-工作台按钮组创建新订单计算下一个订单的编号,并显示一个空的订单。增加订货项打开货物展示窗(货架),由顾客挑选商品(拖放)。删除订货项删除当前的订货项。更新Update保存订单(涉及订单表、订货表)5 products窗口-货架 图2货物窗口双击某物品,显示具体信息。6 物品的具体信息 图3物品的详细信息7 商品表-后台数据(商品号,品名,说明,规格,颜色,数量,单价)idnamedescriptionsizecolorquantityunit_price301Tee ShirtV-neckMediumOrange5414.00右击品种窗口,在快捷菜单中可以改变商品的显示形式,即ListView的四种方式8 ListView的四种方式-货物的不同摆放风格(1)Large Icon-大图标 图4ListView的四种方式(2)Small Icon-小图标(3)List-列表分析:小图标和列表方式有何不同。(小图标以行为主,列表以列为主)(4)Report-详细信息分析:上述四种方式与什么软件的界面相似。资源管理器9 生成订货清单-从货架取货(拖放)将商品窗口中的商品拖放到订单窗口,自动生成一条订单项,见图5。三、相关对象四、设计窗口W_add_sales_order(一) 设计界面控件1-DW_Orderl 数据窗口控件DW_Order(位于上方)l 对应的数据窗口对象(d_add_sales_order)l 对应的后台数据表(sales_order)l 存放订单的信息l 数据窗口控件DW_Order的重要属性 string DataObject=d_add_sales_order/转去看d_add_sales_order 数据窗口对象d_add_sales_order设计视图预览视图思考:如何设计编辑风格为下拉列表框?如何指定日期的格式?如何设计编辑风格为下拉数据窗口?/?d_dddw_fin_code/?d_dddw_cust/?d_dddw_sales_repsDw_order的 itemchanged事件代码event itemchanged;ib_Changed = Trueend event/当数据窗口中某字段发生变化时发生。参见附录。(二)设计界面控件1-DW_ Iteml 数据窗口控件DW_ Item(位于下方)l 对应的数据窗口对象(d_add_sales_order_items)l 对应的后台数据表(sales_order_Items和Products)-数据源来自多表l 存放某订单的每一种物品的信息l 数据窗口控件DW_ Item的重要属性 string DataObject= d_add_sales_order_items (1)数据窗口对象d_add_sales_order_items设计和预览思考:分析上图控件外观属性的不同之处。和(答Background Color),和(答Border)(2)表:订货清单(发货单、出库单)(订单号,细目号,商品号,数量,发货日期)idline_idprod_idquantityship_date26521400362009-5-28(3)表:商品表(商品号,品名,介绍,规格,颜色,数量,单价)idnamedescriptionsizecolorquantityunit_price300Tee ShirtTank TopSmallWhite289.00(4)Dw_items的 itemchanged事件代码event itemchanged;ib_Changed = Trueend event/当数据窗口中某字段发生变化时发生。参见附录。(5)难点dw_items的dragdrop的事件代码/!讲过货架窗口再回来/DataObject=d_add_sales_order_items/ dragdrop(自动参数:dragobject source,long row,dwobject dwo)event dragdrop;/局部变量Integerli_Item, li_Row, li_OrderIDStringls_Column, ls_Desc, ls_PictureDoubleldb_PriceListViewllv_ProdListViewItemllvi_Item/ Dropped a product on the order, so add it/获得被拖动对象的指针/llv_Prod 是source,是被拖动的对象。llv_Prod = DraggedObject()/参见附录/返回被拖动对象的指针,也就是触发了drag事件的那个控件对象。/思考:返回指针值是指向listview还是指向listviewitem?/( 上面答:listview.)Returns a reference to the control that triggered a drag event. /获得该对象在列表视图中的索引号li_Item = llv_Prod.SelectedIndex()/3版教材p192(8)获得列表框或列表视图中当前选中项的索引号llv_Prod.GetItem(li_Item, llvi_Item)/3版教材p192(8)获得列表框或列表视图中当前选中项的索引号/ 语法:listviewname.GetItem ( index, column, item )/ 获取ListView 控件的某列表项的各项属性. 若不指定列,则获取该项第一列的值./插入订货清单的各细目的记录/ Add new order item lineli_Row = This.InsertRow(0)/在最后一行插入一行,成功时返回行号This.Object.line_idli_Row = li_Row/ Default Ship Date and Quantity/设置发货日期和数量的默认值This.Object.ship_dateli_Row = Today()This.Object.quantityli_Row = 1/获得“拖动”商品信息:id和pricellv_Prod.GetItem(li_Item, 3, ls_Column)This.Od_idli_Row = Integer(ls_Column)/ Get price (strip off the leading $)llv_Prod.GetItem(li_Item, 7, ls_Column)ldb_Price = Double(Right(ls_Column, (Len(ls_Column) - 1)This.Oduct_unit_priceli_Row = ldb_Price/获得“拖动”商品信息:description / Get product descriptionllv_Prod.GetItem(li_Item, 2, ls_Column)ls_Desc = ls_Columnllv_Prod.GetItem(li_Item, 1, ls_Column)ls_Desc = ls_Desc + - + ls_ColumnThis.Oduct_descriptionli_Row = ls_Desc/获得“拖动”商品信息:picture name / Get the picture nameThis.Oduct_picture_nameli_Row = String(llvi_Item.Data)li_OrderID = dw_order.Object.id1/注意:dw_order对应的数据窗口对象是带参数的,结果只有一行,这里id1的1很正常。This.Object.sales_order_items_idli_Row = li_OrderID/标记变化ib_Changed = Trueend event/小结:数据窗口的拖放事件中,主要是获得了被拖的对象信息。(三) 设计界面控件3-按钮组/讲解顺序 /(0)帮助按钮(略)/(1)关闭按钮/(2)新订单按钮/(3)添加购物选项按钮/(4)删除购物选项按钮/(5)更新按钮(1)关闭按钮(close)(cb_close)clicked代码Close(Parent)(2)新订单按钮(New Order)(cb_add)clicked代码 If ib_Changed Then/ ib_Changed是一个窗口实例变量,Boolean类型。表示If MessageBox(Add Sales Order, Do you want to save the current order before adding a new one?, &Question!, YesNo!) = 1 Thencb_update.Trigger Event Clicked()/后面讲End ifEnd ifdw_items.Reset()/教材p167(9行),清除数据窗口控件中的所有数据。Parent.Post Event ue_add_order()/用户定义事件程序运行结果:(1) 当创建新的订单时,如果有未保存的订单(ib_changed=true),出现提示框如下。(2) 回答“是”,保存(3) 回答“否”,清除订单内容,调用ue_add_order,开始一个新的订单。(2调)用户事件ue_add_orderevent ue_add_order;/局部变量、子窗口类型Integerli_OrderNum, li_RowDataWindowChildldwc_Fin, ldwc_Cust, ldwc_Rep/ DataWindowChild类型理解为:数据窗口对象中的数据窗口对象/产生下一订单号li_OrderNum = of_get_next_num()/自定义函数,产生下一个订单号,后面讲。If li_OrderNum 0 Then Return/订单数据窗复位(上方)dw_order.Reset()/插入新记录,自动填入订单号、今天的日期这两项,其他项由用户从下拉列表框中选。li_Row = dw_order.InsertRow(0)/教材p167(1)在最后一行后面插入一行。/Returns the number of the row that was added if it succeeds and -1 if an error occurs.dw_order.object.idli_Row = li_OrderNumdw_order.object.order_dateli_Row = Today()/获得相应子数据窗的指针dw_order.GetChild(fin_code_id, ldwc_Fin)dw_order.GetChild(cust_id, ldwc_Cust)dw_order.GetChild(sales_rep, ldwc_Rep)/ Provides a reference to a child DataWindow or to a report in a composite DataWindow, which you can use in DataWindow functions to manipulate that DataWindow or report./ Syntax :integer dwcontrol.GetChild (string name, REF DataWindowChild dwchildvariable )/设置子数据窗的事务对象,取数据ldwc_Fin.SetTransObject(sqlca)ldwc_Fin.Retrieve()ldwc_Cust.SetTransObject(sqlca)ldwc_Cust.Retrieve()ldwc_Rep.SetTransObject(sqlca)ldwc_Rep.Retrieve()/全局窗口变量 ib_Changed = Trueib_Changed = True end event (2调)函数of_get_next_num ();无参数public function integer of_get_next_num ();Integerli_NextNum/从“订单表”中取已有的最大的订单号,产生下一个订单号SELECT Max(id) INTO :li_NextNum FROM sales_order;/注意句末分号If sqlca.sqlcode 0 ThenMessageBox(SQL Error, sqlca.sqlerrtext, Stopsign!)Return -1End ifReturn li_NextNum + 1/成功返回下一个订单号,不成功返回-1end function(3)添加购物选项按钮(Add Items.)(cb_prod)的Clicked代码/打开货架视图窗口Open(w_prod_listview)/后面讲(4)删除购物选项按钮(delete item)(cb_del)的Clicked代码/局部变量Integerli_RowStringls_Descli_Row = dw_items.GetRow()/p168(15)/ 数据窗口控件函数GetRow():获得当前行号,如果行号小于1,说明没有订货,直接返回。If li_Row 1 Then Return/ 显示对话框,确认是否删除。ls_Desc = dw_items.Oduct_descriptionli_RowIf MessageBox(Delete Item, Are you sure you want to delete item # + String(li_Row) + &: + ls_Desc + ?, Question!, YesNo!, 2) = 2 Then Return/删除当前行dw_items.DeleteRow(li_Row)/p167(2)/ 数据窗口控件函数DeleteRow(li_Row):删除当前行/标注变化标志ib_Changed = True(5)更新按钮(Update)(cb_update)的clicked代码/(重点)/局部变量Integerli_RC/将数据窗编辑控件的内容送到主缓冲区dw_order.AcceptText()dw_items.AcceptText()/2版教材p140(25),p142。3版教材p169(24),/将数据窗口编辑控件的内容送到数据窗口控件的主缓冲区中,之前必须经过列的有效性检验。/如此前没有变化,直接返回If Not ib_Changed Then Return/ 检查所有订单数据是否齐全If IsNull(dw_order.Object.cust_id1) Or IsNull(dw_order.Object.fin_code_id1) Or &IsNull(dw_order.Object.sales_rep1) Or IsNull(dw_order.Object.region1) ThenMessageBox(Invalid Order, All order information must be entered., Exclamation!)Return -1End If/ 将数据窗口上的数据保存到数据库,先保存订单表,再保存清单表dw_order.SetTransObject(sqlca)/设置事务对象li_RC = dw_order.Update()/3版教材p167(3),成功返回1 ,失败返回-1If li_RC 0 Then Return li_RCdw_items.SetTransObject(sqlca)li_RC = dw_items.Update()If li_RC 0 ThenRollback;/参见附录,清除本事务对象上一次rollback或commit到现在为止的对数据库的所有改变。Return li_RCElseCommit;/ 参见附录,对数据库做永久改变,或终止用户定义事务。End if/ 特别强调:/ 当保存订单表不成功时,就不必再保存清单表;当保存清单表不成功,必须将订单表的相应记录也取消。/标志为未改变。ib_Changed = False/ “w_prod_listview”后面讲If IsValid(w_prod_listview) Then w_prod_listview.Post Event ue_refresh_items()Return 1end event(四) 设计界面-窗口的事件代码(1)open事件代码event open;call super:open;dw_items.SetRowFocusIndicator(Hand!)/3版教材p168(20)/ SetRowFocusIndicator(Hand!)是数据窗口函数,当前记录前加手型指针,其他枚举值(Off!无指示器,FocusRect!点矩形)/触发ue_add_order()Post Event ue_add_order()/触发“add_item”cb_prod.Post Event Clicked()/参见命令按钮的名称end event/open 事件结束(2)closequery事件代码/窗口关闭前发生,返回值0允许关闭,1不许关闭event closequery;/局部变量Integerli_Ans/若实例变量ib_Changed为真,关闭窗口前,询问用户是否保存改变?/3(取消):返回1,不许关闭。/1(是):触发“更新”按钮的clicked代码,不成功则不许关闭。/2(否):允许关闭。If ib_Changed Thenli_Ans = MessageBox(Add Sales Order, This order has not been saved. Do you want to save before quitting?, &Question!, YesNoCancel!, 1)If li_Ans = 3 Then/按“取消”Return 1Elseif li_Ans = 1 ThenIf cb_update.Trigger Event Clicked() 1 Then ls_Label += tChoose Case Lower(Left(ids_Products.Describe(ls_Column + .Coltype), 3)Case decldb_Value = ids_Products.GetItemDecimal(ai_Row, ls_Column)/注意:ai_row是形式参数ls_Label += String(ldb_Value, $#0.00)Case chals_Label += ids_Products.GetItemString(ai_Row, ls_Column)Case datldt_Value = ids_Products.GetItemDate(ai_Row, ls_Column)ls_Label += String(ldt_Value)Case Elsell_Value = ids_Products.GetItemNumber(ai_Row, ls_Column)ls_Label += String(ll_Value)End ChooseEnd IfNextReturn ls_Labelend function/回到(7)调用of_set_label(ai_row)处 。(6)窗口的close 事件代码event close;/销毁对象、关闭窗口Destroy ids_ProductsIf IsValid(im_PopMenu) ThenDestroy im_PopMenuEnd IfIf IsValid(w_update_prod) Then Close(w_update_prod)end event(7)窗口的resize 事件代码event resize;lv_prod.Resize(newwidth - (2 * ii_WindowBorder), newheight - (lv_prod.Y + ii_WindowBorder)/ ii_WindowBorder是窗口实例变量,初值 = 15end event(五)lv_prod的代码 (1)rightclicked事件代码(属于lv_prod)/创建菜单对象实例m_lv_rmb_prodevent rightclicked;If Not IsValid(im_PopMenu) Thenim_PopMenu = Create m_lv_rmb_prodEnd If/ IsValid函数: Determines whether an object variable is instantiated-whether its value is a valid object handle./ IsValid函数:确定一个对象是否实例化。/ im_PopMenu:窗口实例变量/弹出快捷菜单(根据不同情况,有些菜单项不可用)If index 1 Then/右击的不是列表视图中的项目im_PopMenu.m_action.m_edititem.Enable
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二手挖掘机买卖合同15篇
- 个人土地承包合同(14篇)
- 个体户股份转让的协议书(10篇)
- 专科护士知识培训计划课件
- 安徽省蚌埠市经济开发区2026届数学八上期末学业水平测试试题含解析
- 2026届湖南省长沙市明德教育集团数学九上期末复习检测试题含解析
- 2025年北京市个人自行成交版房屋租赁合同
- 2025年二次转租房屋如何签订合同
- 2025南师大仙林校区茶苑住宅停车场汽车库使用权买卖合同
- 工商银行池州市青阳县2025秋招笔试会计学专练及答案
- 中医减肥合同协议书
- 输血知识培训课件
- 粉红税问题成因分析
- 知识产权转化与产权运作制度
- 中国冠心病康复循证实践指南(2024版)解读
- 部编版历史八年级上册第一单元 第2课《第二次鸦片战争》检测卷(后附答案及解析)
- 《北京市二年级上学期数学第二单元试卷》
- 中国老年患者术后谵妄防治专家共识2023
- 山东省济南市舜耕中学2024-2025学年九年级上学期10月月考化学试题(无答案)
- 明股实债合作完整协议
- 2024年“蓉漂人才荟”四川成都市农林科学院招聘高层次人才8人历年【重点基础提升】模拟试题(共500题)附带答案详解
评论
0/150
提交评论