WCF广州本田整车销售系统技术解析(三) 订单新增功能实现分析
2015-05-31 20:57
603 查看
订单新增功能实现分析
订单新增功能主要是录入一条新的订单数据以及订单的明细。订单编号、订单号、发票号自动生成。在司机姓名改变的时候联系电话会随着司机姓名改变而改变,打开货物列表,选择需要哪些车辆双击就可以添加到订单明细列表,填写其它的订单信息之后 ,点击保存就可以完成订单的新增操作!
新增订单如图(图7)所示
(图7)
从界面上可以看到我们这里用到的控件有
表与关系如图(图8)所示
(图8)
表1:FreightInvoicesList(货运单表)
PrimaryKey(s): FreightInvoicesID
表2:FreightInvoicesDetailList(货运单明细表)
PrimaryKey(s): FreightInvoicesDetailID
表3:CarList(车辆表)
Primary Key(s): CarID
一、订单编号、订单号、发票号自动生成实现
订单编号、订单号、发票号自动生成如图(图9)
(图9)
1、数据库的存储过程
2、逻辑层(BLL)
[b][b]3、界面层(UIL)[/b][/b]
二、司机改变,电话号码随之改变
司机改变,电话号码随之改变如图(图10)所示
(图10)
[b][b][b]1、数据库的存储过程[/b][/b][/b]
[b][/b]
[b][b][b]2、逻辑层(BLL)[/b][/b][/b]
[b][/b]
[b][b][b]3、界面层(UIL)[/b][/b][/b]
[b][/b]
三、两个dgv之间的传值实现
两个dgv之间的传值如图(图11)所示
(图11)
[b][b][b]1、界面层(UIL)[/b][/b][/b]
第一步:双击打开货物dgvCommodity
第二步:双击dgvCommodity某一行赋值给dgvHuoWuList
四、dgv中的计算,得出总价和dgv数量单元格中只能输入数字
dgv中的计算,得出总价和dgv数量单元格中只能输入数字如图(图12)所示
(图12)
[b][b]1、dgv中的计算、得出总价[/b][/b]
[b][b][b]2、dgv中数量单元格只能输入数字[/b][/b][/b]
[b][b][b][b]五、新增保存[/b][/b][/b][/b]
新增保存如图(图13)所示
(图13)
[b][b][b][b][b]1、数据库的存储过程[/b][/b][/b][/b][/b]
第一步:新增一条订单,并立即获取新增那条货运单ID出来
第二步:把查询出来货运单ID作为外键,新增货运单明细的时候,货运单ID作为外键,以一条货运单对多条货运单明细,把货运单ID插进货运单明细表里面。形成一对多的关系
第三步:根据一条货运单明细的数量来生成车辆
2、逻辑层(BLL)
第一步:新增一条订单,并立即获取新增那条货运单ID出来
第二步:把查询出来货运单ID作为外键,新增货运单明细的时候,货运单ID作为外键,以一条货运单对多条货运单明细,把货运单ID插进货运单明细表里面。形成一对多的关系
第三步:根据一条货运单明细的数量来生成车辆
3、界面层(UIL)
第一步:新增一条订单,并立即获取新增那条货运单ID出来
第二步:把查询出来货运单ID作为外键,新增货运单明细的时候,货运单ID作为外键,以一条货运单对多条货运单明细,把货运单ID插进货运单明细表里面。形成一对多的关系。第三步:根据一条货运单明细的数量来生成车辆。
本文仅供学习,禁止用于商业活动,否则后果自负!!!
订单新增功能主要是录入一条新的订单数据以及订单的明细。订单编号、订单号、发票号自动生成。在司机姓名改变的时候联系电话会随着司机姓名改变而改变,打开货物列表,选择需要哪些车辆双击就可以添加到订单明细列表,填写其它的订单信息之后 ,点击保存就可以完成订单的新增操作!
新增订单如图(图7)所示
(图7)
从界面上可以看到我们这里用到的控件有
控件名称 | 说明 |
日期控件(DateTimePicker) | 控件可以在工具箱直接拖动至窗体,拖至窗体后右击属性可以修改控件的样式和各种属性,还可以编辑事件。 |
下拉框(ComboBox) | |
文本(TextBox) | |
按钮(Button) | |
表格(DataGridView) | |
菜单控件(toolStrip) |
(图8)
表1:FreightInvoicesList(货运单表)
PrimaryKey(s): FreightInvoicesID
Field | Type | Nulls? | 说明 |
FreightInvoicesID | int - Identity | No | 货运单ID |
FreightInvoicesNumber | nchar (60) | Yes | 货运单编号 |
IssueCarStaffID | int | Yes | 发车员ID |
ForWardingdate | datetime | Yes | 发运日期 |
TransportCompanyID | int | Yes | 承运方ID |
TrafficCarID | int | Yes | 运输车ID |
TrafficDriverID | int | Yes | 运输司机ID |
PassManageerID | int | Yes | 经办人ID |
Sum | decimal (18, 3) | Yes | 总价 |
PlanHandCarDate | datetime | Yes | 计划交车日期 |
OrderNumber | nchar (20) | Yes | 订单号 |
InvoiceNumber | nchar (20) | Yes | 发票号 |
Remark | nchar (100) | Yes | 备注 |
WhetherFinishConnectCar | bit | Yes | 是否完成接车 |
WhetherExamineaAndVerify | bit | Yes | 审核否 |
WhetherConnectCar | bit | Yes | 是否接车 |
PrimaryKey(s): FreightInvoicesDetailID
Field | Type | Nulls? | 说明 |
FreightInvoicesDetailID | int - Identity | No | 货运单明细ID |
FreightInvoicesID | int | Yes | 货运单ID |
CommodityCarID | int | Yes | 货物车辆ID |
Quantity | int | Yes | 数量 |
WhetherStraightMelt | bit | Yes | 直销车否 |
Primary Key(s): CarID
Field | Type | Nulls? | 说明 |
CarID | int - Identity | No | 车辆ID |
FreightInvoicesDetailID | int | Yes | 货运单明细ID |
CarTypeID | int | Yes | 车辆类型ID |
CarFrameNumber | nchar (60) | Yes | 车架号 |
CarEngineNumber | nchar (60) | Yes | 发动机号 |
CarKindID | int | Yes | 车种ID |
CarMondelID | int | Yes | 车型ID |
CarBodyColorID | int | Yes | 车身颜色ID |
CarUnderOrnamentsColorID | int | Yes | 内饰颜色ID |
CarTransmissionID | int | Yes | 变速箱ID |
CarKeyNumber | nchar (20) | Yes | 钥匙号 |
CarStockPrice | decimal (18, 3) | Yes | 进货价格 |
ProductionManufacturersID | int | Yes | 生产厂家ID |
CarPDIWhetherDetection | bit | Yes | PDI检查否 |
CarStatusID | int | Yes | 车辆状态ID |
OldCarID | int | Yes | 原车辆ID |
OutSurveyCommodityCarID | int | Yes | 外调商品车ID |
WhetherSchedule | bit | Yes | 是否预定 |
ThoughtCarPDIWhetherDetection | bit | Yes | 通过PDI检查否 |
WhetherStraightMelt | bit | Yes | 直销车否 |
WhetherConnectCar | bit | Yes | 是否接车 |
订单编号、订单号、发票号自动生成如图(图9)
(图9)
1、数据库的存储过程
--查询最大单据数 if(@Type='frm_DingDanGuanLi_Insert_SelectZuiDaDanHaoShu') begin BEGINTRAN UPDATEMaxNumberStatisticsList --修该MaxNumberStatisticsList SETNumbers=Numbers+1 --设置Numbers+1 SELECTNumbers --把修改后的Numbers查询出来 FROMMaxNumberStatisticsList --从MaxNumberStatisticsList查询 COMMITTRAN End
2、逻辑层(BLL)
#region查询最大单号数 [OperationContract]//行为标签,WCF配置 publicDataSet frm_DingDanGuanLi_Insert_SelectZuiDaDanHaoShu() { SqlParameter[] mySqlParameters = { newSqlParameter("@Type",SqlDbType.Char), }; mySqlParameters[0].Value = "frm_DingDanGuanLi_Insert_SelectZuiDaDanHaoShu"; DataTable dt = myDALMethod.QueryDataTable("订单管理_frm_DingDanGuanLi_DingDanGuanLi_Insert", mySqlParameters); DataSet ds = newDataSet(); ds.Tables.Add(dt); return ds; } #endregion
[b][b]3、界面层(UIL)[/b][/b]
#region生成货运单号 DateTime dt = DateTime.Now;//获取系统的当前时间 string strDanShu;//声明变量单数 string DingDanBianHao;//声明变量订单编号 strDanShu = myfrm_DingDanGuanLi_DingDanGuanLi_InsertClient.frm_DingDanGuanLi_Insert_SelectZuiDaDanHaoShu().Tables[0].Rows[0][0].ToString().Trim();//查询最大单数 //switch语句,判断当前单数的长度 switch (strDanShu.Length) { //当单数的长度为1的时候(也是个位数1-9的时候) case 1: strDanShu = "000" + strDanShu; break;//在单数前面加上三个0 case 2: strDanShu = "00" + strDanShu; break;//在单数前面加上二个0 case 3: strDanShu = "0" + strDanShu; break;//在单数前面加上一个0 default: break; } DingDanBianHao = ShengChengDanHao(strDanShu);//调用ShengChengDanHao()方法 txtFreightInvoicesNumber.Text = "DD" + DingDanBianHao;//赋值给txtFreightInvoicesNumber txtOrderNumber.Text = "XDD" + strDanShu; txtInvoiceNumber.Text = "FP" + strDanShu; #endregion //自定义生成单号的方法 publicstring ShengChengDanHao(string strDanShu) { DateTime dt = DateTime.Now;//获取系统的当前时间 string strYear = dt.Year.ToString().Trim();//提取年 string strMonth = dt.Month.ToString().Trim();//提取月 //三目运算符 strMonth = (strMonth.Length == 1 ? "0" + strMonth : strMonth);//当月的长度等于1的时候,执行?后面的"0"+strMonth,即在strMonth加个0,不等1的时候直接返回 string strDay = dt.Day.ToString().Trim();//获取天 strDay = (strDay.Length == 1 ? "0" + strDay : strDay);//同上 return strYear + strMonth + strDay + strDanShu;//返回一个年+月+日+单数的字符串 }
二、司机改变,电话号码随之改变
司机改变,电话号码随之改变如图(图10)所示
(图10)
[b][b][b]1、数据库的存储过程[/b][/b][/b]
[b][/b]
--(6)司机名称改变绑定电话号码 if(@Type='Select_CboSiJiXingMingChange_BangDingShouJiHaoMa') begin -- LTRIM()、RTRIM()是左右去空格的意思 SELECTLTRIM(RTRIM(TrafficDriverID))asTrafficDriverID,LTRIM(RTRIM(TrafficDriverName))asTrafficDriverName,LTRIM(RTRIM(CallPhoneNumber))asCallPhoneNumber FROMTrafficDriverList --Where 是条件 whereTrafficDriverList.TrafficDriverID=@TrafficDriverID end
[b][b][b]2、逻辑层(BLL)[/b][/b][/b]
[b][/b]
#region绑定司机姓名改变号码 [OperationContract] publicDataSet Select_CboSiJiXingMingChange_BangDingShouJiHaoMa(int TrafficDriverID) { SqlParameter[] mySqlParameters = { newSqlParameter("@Type",SqlDbType.Char), newSqlParameter("@TrafficDriverID",SqlDbType.Int) }; mySqlParameters[0].Value = "Select_CboSiJiXingMingChange_BangDingShouJiHaoMa"; mySqlParameters[1].Value = TrafficDriverID; DataTable dt = myDALMethod.QueryDataTable("公共方法_Combox绑定", mySqlParameters); DataSet ds = newDataSet(); ds.Tables.Add(dt); return ds; } #endregion
[b][b][b]3、界面层(UIL)[/b][/b][/b]
[b][/b]
///<summary> ///下拉框选择值改变 ///</summary> privatevoid cboSiJiXingMing_SelectedValueChanged(object sender, EventArgs e) { if (KaiGuan == true)//判断下拉框在Load事件中加载完毕之后执行以下代码,不加这句会出错。作用防止报错 { txtLinkPhone.Text = "";//清空txtLinkPhone联系电话 int intSiJiID = Convert.ToInt32(cboTrafficDriver.SelectedValue);//获取司机下拉框的司机ID值 DataTable dtSiJiXingMingChange = my公共方法_Combox绑定Client.Select_CboSiJiXingMingChange_BangDingShouJiHaoMa(intSiJiID).Tables[0];//查询电话号码 txtLinkPhone.Text = dtSiJiXingMingChange.Rows[0]["CallPhoneNumber"].ToString().Trim();//绑定到txtLinkPhone //Trim()是去空格的意思 } }
三、两个dgv之间的传值实现
两个dgv之间的传值如图(图11)所示
(图11)
[b][b][b]1、界面层(UIL)[/b][/b][/b]
第一步:双击打开货物dgvCommodity
///<summary> /// dgvHuoWuList_CellMouseDoubleClick事件 ///</summary> privatevoid dgvHuoWuList_CellMouseDoubleClick(object sender, DataGridViewCellMouseEventArgs e) { if (e.ColumnIndex != 0)//判断当前列索引是否为0,不为0执行 { if (dgvCommodity.Visible == false)//判断dgvCommodity的可见属性为false的时候 { dgvCommodity.Visible = true;//设置为true } else { dgvCommodity.Visible = false;//设置为false } } }
第二步:双击dgvCommodity某一行赋值给dgvHuoWuList
///<summary> /// dgvHuoWu_CellMouseDoubleClick双击事件 ///</summary> privatevoid dgvHuoWu_CellMouseDoubleClick(object sender, DataGridViewCellMouseEventArgs e) { #region声明变量并获取dgvCommodity当前行的对应单元格值 if (e.RowIndex >= 0)//判断选择的行索引是否大于或等于0 { int intCheLiangID = Convert.ToInt32(dgvCommodity.CurrentRow.Cells["货物_车辆ID"].Value); string strCheXing = dgvCommodity.CurrentRow.Cells["货物_车型"].Value.ToString().Trim(); int intCheXingID = Convert.ToInt32(dgvCommodity.CurrentRow.Cells["货物_车型ID"].Value); string strCheZhong = dgvCommodity.CurrentRow.Cells["货物_车种"].Value.ToString().Trim(); int intCheZhongID = Convert.ToInt32(dgvCommodity.CurrentRow.Cells["货物_车种ID"].Value); string strJiaGe = dgvCommodity.CurrentRow.Cells["货物_价格"].Value.ToString().Trim(); string strCheShengYanSe = dgvCommodity.CurrentRow.Cells["货物_车身颜色"].Value.ToString().Trim(); int intCheShenYanSeID = Convert.ToInt32(dgvCommodity.CurrentRow.Cells["货物_车身颜色ID"].Value); string strShengChanChangJia = dgvCommodity.CurrentRow.Cells["货物_生产厂家"].Value.ToString().Trim(); int intShengChangChangJiaID = Convert.ToInt32(dgvCommodity.CurrentRow.Cells["货物_生产厂家ID"].Value); string strNeiSeYanSe = dgvCommodity.CurrentRow.Cells["货物_内饰颜色"].Value.ToString().Trim(); int intNeiShiYanSeID = Convert.ToInt32(dgvCommodity.CurrentRow.Cells["货物_内饰颜色ID"].Value); string strBianSuXiang = dgvCommodity.CurrentRow.Cells["货物_变速箱"].Value.ToString().Trim(); int intBianSuXiangID = Convert.ToInt32(dgvCommodity.CurrentRow.Cells["货物_变速箱ID"].Value); for (int i = 0; i < dgvCommodityList.Rows.Count; i++)//循环dgvCommodityList { if (Convert.ToInt32(dgvCommodityList.Rows[i].Cells["货物车辆ID"].Value) == intCheLiangID)//判断dgvCommodityList里面的货物车辆ID的值是否等于intCheLiangID,相等就返回 { MessageBox.Show("该车辆已经存在!!!"); dgvCommodity.Visible = false; return; } } //循环dgvCommodityList for (int i = 0; i < dgvCommodityList.Rows.Count; i++) { //判断那一行货物车辆ID的单元格的值为null if (dgvCommodityList.Rows[i].Cells["货物车辆ID"].Value == null) { //为null就赋值给dgvCommodityList那一行的对应单元格的值 dgvCommodityList.Rows[i].Cells["货物车辆ID"].Value = intCheLiangID; dgvCommodityList.Rows[i].Cells["车型"].Value = strCheXing; dgvCommodityList.Rows[i].Cells["车种"].Value = strCheZhong; dgvCommodityList.Rows[i].Cells["单价"].Value = strJiaGe; dgvCommodityList.Rows[i].Cells["车身颜色"].Value = strCheShengYanSe; dgvCommodityList.Rows[i].Cells["生产厂家"].Value = strShengChanChangJia; dgvCommodityList.Rows[i].Cells["内饰颜色"].Value = strNeiSeYanSe; dgvCommodityList.Rows[i].Cells["变速箱"].Value = strBianSuXiang; dgvCommodityList.Rows[i].Cells["车型ID"].Value = intCheXingID; dgvCommodityList.Rows[i].Cells["车种ID"].Value = intCheZhongID; dgvCommodityList.Rows[i].Cells["车身颜色ID"].Value = intCheShenYanSeID; dgvCommodityList.Rows[i].Cells["生产厂家ID"].Value = intShengChangChangJiaID; dgvCommodityList.Rows[i].Cells["内饰颜色ID"].Value = intNeiShiYanSeID; dgvCommodityList.Rows[i].Cells["变速箱ID"].Value = intBianSuXiangID; dgvCommodity.Visible = false; } } dgvCommodityList.Rows.Add();//增加一行 } }
四、dgv中的计算,得出总价和dgv数量单元格中只能输入数字
dgv中的计算,得出总价和dgv数量单元格中只能输入数字如图(图12)所示
(图12)
[b][b]1、dgv中的计算、得出总价[/b][/b]
///<summary> ///自定义计算方法 ///</summary> publicvoid JiSuanFangFa() { try { decimal decZongJia = 0;//声明一个浮点型的变量,并初始化 foreach (DataGridViewRow dgvr in dgvCommodityList.Rows)//遍历dgvCommodityList { int intindex = dgvr.Index;//获取当前索引 //当前行的【单价】单元格的值乘【数量】的值 //decZongJia叠加 decZongJia += Convert.ToDecimal(dgvCommodityList.Rows[intindex].Cells["单价"].Value) * Convert.ToInt32(dgvCommodityList.Rows[intindex].Cells["数量"].Value); } txtSum.Text = decZongJia.ToString();//赋值给txtSum } catch { MessageBox.Show("你输入格式错误,请重新输入!!"); dgvCommodityList.CurrentRow.Cells["数量"].Value = null;//当前数量单元格的值清空 } } privatevoid dgvHuoWuList_CellValueChanged(object sender, DataGridViewCellEventArgs e) { JiSuanFangFa(); }
[b][b][b]2、dgv中数量单元格只能输入数字[/b][/b][/b]
///<summary> /// DGV编辑文本框--承载与DGV文本框 ///</summary> publicstaticDataGridViewTextBoxEditingControl dgvCompile_Text = newDataGridViewTextBoxEditingControl();//实例化一个可以承载dgv文本框的对象 privatevoid dgvCommodityList_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e) { try { dgvCompile_Text = (DataGridViewTextBoxEditingControl)e.Control; //获取dgv编辑单元格的数据 dgvCompile_Text.KeyPress += dgvCompile_KeyPress;//委托生成KeyPress事件 } catch { } } privatevoid dgvCompile_KeyPress(object sender, KeyPressEventArgs e) { dgvCompile_keyChanged(dgvCompile_Text); //为dgv文本框添加 keychanged 事件 dgvCompile_KeyPress(e,dgvCompile_Text);//为dgv文本框添加 keypress 事件 } ///<summary> /// ///</summary> ///<param name="dgvTxt">单元格的数据</param> privatevoid dgvCompile_keyChanged(DataGridViewTextBoxEditingControl dgvTxt) { try { dgvTxt.Text = Convert.ToInt32(dgvTxt.Text).ToString().Trim(); } catch { } dgvTxt.SelectionStart = dgvTxt.Text.Length; //光标放在最后一个数字上 } privatevoid dgvCompile_KeyPress(KeyPressEventArgs e, DataGridViewTextBoxEditingControl dgvTxt) { if ((char.IsNumber(e.KeyChar) || e.KeyChar == (char)Keys.Back)) //判断用户按下的是否数字和左删除键 { try { string strNumber = null; //实例化字符串保存当前按下的数字 string strCount = dgvTxt.Text; //实例化字符串保存当前dgv文本框的数 if (char.IsNumber(e.KeyChar)) //判断是否为数字 { strNumber += e.KeyChar; } else { strCount = strCount.Remove(strCount.Length - 1);//strCount的长度减1 } } catch { } } else { e.Handled = true; //按下按钮无效 } }[b][/b]
[b][b][b][b]五、新增保存[/b][/b][/b][/b]
新增保存如图(图13)所示
(图13)
[b][b][b][b][b]1、数据库的存储过程[/b][/b][/b][/b][/b]
第一步:新增一条订单,并立即获取新增那条货运单ID出来
--新增订单 if(@Type='frm_DingDanGuanLi_Insert_btnBaoCunClick_InsertDingDan') begin BEGINTRAN INSERTINTOFreightInvoicesList (FreightInvoicesNumber,IssueCarStaffID,ForWardingdate,TransportCompanyID,TrafficCarID,TrafficDriverID,PassManageerID,Sum,PlanHandCarDate,OrderNumber,InvoiceNumber,Remark, WhetherFinishConnectCar,WhetherExamineaAndVerify,WhetherConnectCar) VALUES (@FreightInvoicesNumber,@IssueCarStaffID,@ForWardingdate,@TransportCompanyID,@TrafficCarID,@TrafficDriverID,@PassManageerID,@Sum,@PlanHandCarDate,@OrderNumber,@InvoiceNumber,@Remark, 0, 0, 0) SELECT@@IDENTITY--把刚刚新增的FreightInvoicesList表数据的主键货运单ID立即查询出来 COMMITTRAN end
第二步:把查询出来货运单ID作为外键,新增货运单明细的时候,货运单ID作为外键,以一条货运单对多条货运单明细,把货运单ID插进货运单明细表里面。形成一对多的关系
--新增订单明细 if(@Type='frm_DingDanGuanLi_Insert_btnBaoCunClick_InsertDingDanMingXi') begin BEGINTRAN INSERTINTOFreightInvoicesDetailList(FreightInvoicesID,CommodityCarID,Quantity,WhetherStraightMelt) VALUES(@FreightInvoicesID,@CommodityCarID,@Quantity,@WhetherStraightMelt) SELECT@@IDENTITY--把刚刚新增的FreightInvoicesDetailList表数据的主键货运单明细ID立即查询出来 COMMITTRAN end
第三步:根据一条货运单明细的数量来生成车辆
--通过一条订单明细的数量,新增车辆到车辆表 if(@Type='frm_DingDanGuanLi_Insert_btnBaoCunClick_InsertCarXinXi') begin INSERTINTOCarList (FreightInvoicesDetailID,CarTypeID,CarFrameNumber,CarEngineNumber,CarKindID,CarMondelID,CarBodyColorID,CarUnderOrnamentsColorID,CarTransmissionID,CarKeyNumber, CarStockPrice,ProductionManufacturersID,CarPDIWhetherDetection,CarStatusID,OldCarID,OutSurveyCommodityCarID,WhetherSchedule,ThoughtCarPDIWhetherDetection,WhetherStraightMelt, WhetherConnectCar) VALUES (@FreightInvoicesDetailID,34,@CarFrameNumber,@CarEngineNumber,@CarKindID,@CarMondelID,@CarBodyColorID,@CarUnderOrnamentsColorID,@CarTransmissionID,@CarKeyNumber,@CarStockPrice,@ProductionManufacturersID, 0, 144, 0, 0, 0, 0,@WhetherStraightMelt,0) end
2、逻辑层(BLL)
第一步:新增一条订单,并立即获取新增那条货运单ID出来
#region新增货运单 [OperationContract] publicDataSet frm_DingDanGuanLi_Insert_btnBaoCunClick_InsertDingDan(string运单编号, int发车员ID, DateTime发运日期, int承运方ID, int运输车ID, int运输司机ID, int经办人ID, decimal总价, DateTime计划交车日期, string订单号, string发票号, string备注) { SqlParameter[] mySqlParameters = { newSqlParameter("@Type",SqlDbType.Char), newSqlParameter("@FreightInvoicesNumber",SqlDbType.Char), newSqlParameter("@IssueCarStaffID",SqlDbType.Int), newSqlParameter("@ForWardingdate",SqlDbType.Char), newSqlParameter("@TransportCompanyID",SqlDbType.Int), newSqlParameter("@TrafficCarID",SqlDbType.Int), newSqlParameter("@TrafficDriverID",SqlDbType.Int), newSqlParameter("@PassManageerID",SqlDbType.Int), newSqlParameter("@Sum",SqlDbType.Decimal), newSqlParameter("@PlanHandCarDate",SqlDbType.DateTime), newSqlParameter("@OrderNumber",SqlDbType.Char), newSqlParameter("@InvoiceNumber",SqlDbType.Char), newSqlParameter("@Remark",SqlDbType.Char) }; mySqlParameters[0].Value = "frm_DingDanGuanLi_Insert_btnBaoCunClick_InsertDingDan"; mySqlParameters[1].Value =运单编号; mySqlParameters[2].Value =发车员ID; mySqlParameters[3].Value =发运日期; mySqlParameters[4].Value =承运方ID; mySqlParameters[5].Value =运输车ID; mySqlParameters[6].Value =运输司机ID; mySqlParameters[7].Value =经办人ID; mySqlParameters[8].Value =总价; mySqlParameters[9].Value =计划交车日期; mySqlParameters[10].Value =订单号; mySqlParameters[11].Value =发票号; mySqlParameters[12].Value =备注; DataTable dt = myDALMethod.QueryDataTable("订单管理_frm_DingDanGuanLi_DingDanGuanLi_Insert", mySqlParameters); DataSet ds = newDataSet(); ds.Tables.Add(dt); return ds; } #endregion
第二步:把查询出来货运单ID作为外键,新增货运单明细的时候,货运单ID作为外键,以一条货运单对多条货运单明细,把货运单ID插进货运单明细表里面。形成一对多的关系
#region新增货运单明细表 [OperationContract] publicDataSet frm_DingDanGuanLi_Insert_btnBaoCunClick_InsertDingDanMingXi(int货运单ID, int货物_车辆ID, decimal数量,bool直销车否) { SqlParameter[] mySqlParameters = { newSqlParameter("@Type",SqlDbType.Char), newSqlParameter("@FreightInvoicesID",SqlDbType.Int), newSqlParameter("@CommodityCarID",SqlDbType.Int), newSqlParameter("@Quantity",SqlDbType.Decimal), newSqlParameter("@WhetherStraightMelt",SqlDbType.Bit) }; mySqlParameters[0].Value = "frm_DingDanGuanLi_Insert_btnBaoCunClick_InsertDingDanMingXi"; mySqlParameters[1].Value = 货运单ID; mySqlParameters[2].Value = 货物_车辆ID; mySqlParameters[3].Value = 数量; mySqlParameters[4].Value = 直销车否; DataTable dt = myDALMethod.QueryDataTable("订单管理_frm_DingDanGuanLi_DingDanGuanLi_Insert", mySqlParameters); DataSet ds = newDataSet(); ds.Tables.Add(dt); return ds; } #endregion
第三步:根据一条货运单明细的数量来生成车辆
#region通过一条订单明细的数量,新增车辆到车辆表 [OperationContract] publicint frm_DingDanGuanLi_Insert_btnBaoCunClick_InsertCarXinXi(int FreightInvoicesDetailID, string CarFrameNumber, string CarEngineNumber, int CarKindID, int CarMondelID , int CarBodyColorID, int CarTransmissionID, decimal CarStockPrice, int ProductionManufacturersID, string CarKeyNumber, int CarUnderOrnamentsColorID, bool WhetherStraightMelt) { SqlParameter[] mySqlParameters = { newSqlParameter("@Type",SqlDbType.Char), newSqlParameter("@FreightInvoicesDetailID",SqlDbType.Int), newSqlParameter("@CarFrameNumber",SqlDbType.Char), newSqlParameter("@CarEngineNumber",SqlDbType.Char), newSqlParameter("@CarKindID",SqlDbType.Int), newSqlParameter("@CarMondelID",SqlDbType.Int), newSqlParameter("@CarBodyColorID",SqlDbType.Int), newSqlParameter("@CarTransmissionID",SqlDbType.Int), newSqlParameter("@CarStockPrice",SqlDbType.Decimal), newSqlParameter("@ProductionManufacturersID",SqlDbType.Int), newSqlParameter("@CarKeyNumber",SqlDbType.Char), newSqlParameter("@CarUnderOrnamentsColorID",SqlDbType.Int), newSqlParameter("@WhetherStraightMelt",SqlDbType.Bit), }; mySqlParameters[0].Value = "frm_DingDanGuanLi_Insert_btnBaoCunClick_InsertCarXinXi"; mySqlParameters[1].Value = FreightInvoicesDetailID; mySqlParameters[2].Value = CarFrameNumber; mySqlParameters[3].Value = CarEngineNumber; mySqlParameters[4].Value = CarKindID; mySqlParameters[5].Value = CarMondelID; mySqlParameters[6].Value = CarBodyColorID; mySqlParameters[7].Value = CarTransmissionID; mySqlParameters[8].Value = CarStockPrice; mySqlParameters[9].Value = ProductionManufacturersID; mySqlParameters[10].Value = CarKeyNumber; mySqlParameters[11].Value = CarUnderOrnamentsColorID; mySqlParameters[12].Value = WhetherStraightMelt; return myDALMethod.UpdateData("订单管理_frm_DingDanGuanLi_DingDanGuanLi_Insert", mySqlParameters); } #endregion
3、界面层(UIL)
第一步:新增一条订单,并立即获取新增那条货运单ID出来
#region 获取控件值 //从TextBox控件上获取值 string strDingDanBianHao = txtFreightInvoicesNumber.Text.ToString().Trim();//获取订单编号 string strDingDanHao = txtOrderNumber.Text.ToString().Trim();//获取订单号 string strFaPiaoHao = txtInvoiceNumber.Text.ToString().Trim();//获取发票号 DateTime FaYunRiQi = dtpForWardingdate.Value;//获取发运日期 DateTime JiHuaJiaoCheRiQi = dtpPlanHandCarDate.Value;//获取计划交车车日期 int intChengYunFangID = Convert.ToInt32(cboTransportCompany.SelectedValue);//获取承运方ID int intYunShuCheID = Convert.ToInt32(cboTrafficCar.SelectedValue);//获取运输车ID int intSiJiID = Convert.ToInt32(cboTrafficDriver.SelectedValue);//获取司机ID int intFaCheYuanID = Convert.ToInt32(cboIssueCarStaff.SelectedValue);//获取发车员ID int intJingBanRenID = Convert.ToInt32(cboPassManageer.SelectedValue);//获取经办人ID decimal decZongJia = Convert.ToDecimal(txtSum.Text);//获取总价 string strBeiZhu = txtRemark.Text.ToString().Trim();//获取备注 #endregion #region 声明字段 int intWeiTianJiaShu = 0;//判断是否填写完整订单信息 int intHuoYunDanID = 0;//声明一个变量,货运单ID int intYanZheng = 0;//验证 int intHuoWuCheLiangID = 0;//货物车辆ID int intChengGongTianJia = 0;//成功添加 int intCheLiangShuLiang = 0;//车辆数量 bool ZhiXiaoCheFou;//直销车否 int intHuoYunDanMingXiID;//获取货运明细ID int intCheZhongID;//车种ID int intCheXingID;//车型ID int intCheShengYanSeID;//车身颜色ID int intNeiShiYanSeID;//内饰颜色ID int intBianSuXiangID;//变速箱ID decimal decJinHuoJiaGe;//进货价格 int intShengChangChangJiaID;//生产厂家ID #endregion //遍历dgvCommodityList foreach (DataGridViewRow dr in dgvCommodityList.Rows)//判断一些值是否为空 { if (dr.Cells["车型"].Value == null || dr.Cells["车种"].Value == null || dr.Cells["单价"].Value == null || dr.Cells["数量"].Value == null || dr.Cells["车身颜色"].Value == null || dr.Cells["内饰颜色"].Value == null || dr.Cells["生产厂家"].Value == null || dr.Cells["变速箱"].Value == null) { if (dr.Cells["车型"].Value == null && dr.Cells["车种"].Value == null && dr.Cells["单价"].Value == null && dr.Cells["数量"].Value == null && dr.Cells["车身颜色"].Value == null && dr.Cells["内饰颜色"].Value == null && dr.Cells["生产厂家"].Value == null && dr.Cells["变速箱"].Value == null) { } else { intWeiTianJiaShu++;//未添加数 } } } //如果当未添加数大于0,提示还有货物信息未填,请输入完整后再保存的信息 if (intWeiTianJiaShu > 0) { MessageBox.Show("还有货物信息未填,请输入完整后再保存!!!"); return;//返回 } //判断dgvCommodityList是否大于2,小于2提示目前您还没有添加商品车辆,请您添加车辆后再保存 if (dgvCommodityList.Rows.Count < 2) { MessageBox.Show("目前您还没有添加商品车辆,请您添加车辆后再保存!!!!!"); return;//返回 } else { //新增货运单 intHuoYunDanID = Convert.ToInt32(myfrm_DingDanGuanLi_DingDanGuanLi_InsertClient.frm_DingDanGuanLi_Insert_btnBaoCunClick_InsertDingDan(DingDanBianHao, intFaCheYuanID, FaYunRiQi,intChengYunFangID, intYunShuCheID, intSiJiID, intJingBanRenID, decZongJia, JiHuaJiaoCheRiQi, strDingDanBianHao, strFaPiaoHao, strBeiZhu).Tables [0].Rows[0][0]); }
第二步:把查询出来货运单ID作为外键,新增货运单明细的时候,货运单ID作为外键,以一条货运单对多条货运单明细,把货运单ID插进货运单明细表里面。形成一对多的关系。第三步:根据一条货运单明细的数量来生成车辆。
if (intHuoYunDanID > 0)//判断刚刚新增的货运单ID是否大于0 { //循环dgvCommodityList,新增货运单明细 for (int k = 0; k < dgvCommodityList.Rows.Count-1; k++) { intYanZheng++;//验证 intHuoWuCheLiangID = Convert.ToInt32(dgvCommodityList.Rows[k].Cells["货物车辆ID"].Value);//循环获取dgv货物车辆ID intCheLiangShuLiang = Convert.ToInt32(dgvCommodityList.Rows[k].Cells["数量"].Value);//获取数量 ZhiXiaoCheFou = Convert.ToBoolean(dgvCommodityList.Rows[k].Cells["直销车"].Value);//获取直销车 intCheXingID = Convert.ToInt32(dgvCommodityList.Rows[k].Cells["车型ID"].Value);//获取车型ID intCheZhongID = Convert.ToInt32(dgvCommodityList.Rows[k].Cells["车种ID"].Value);//获取车种ID intCheShengYanSeID = Convert.ToInt32(dgvCommodityList.Rows[k].Cells["车身颜色ID"].Value);//获取车身颜色ID intNeiShiYanSeID=Convert.ToInt32(dgvCommodityList.Rows[k].Cells["内饰颜色ID"].Value); intBianSuXiangID=Convert.ToInt32(dgvCommodityList.Rows[k].Cells["变速箱ID"].Value); decJinHuoJiaGe = Convert.ToDecimal(dgvCommodityList.Rows[k].Cells["单价"].Value); intShengChangChangJiaID=Convert.ToInt32(dgvCommodityList.Rows[k].Cells["生产厂家ID"].Value); //获取新增的货运单明细ID intHuoYunDanMingXiID = Convert.ToInt32(myfrm_DingDanGuanLi_DingDanGuanLi_InsertClient.frm_DingDanGuanLi_Insert_btnBaoCunClick_InsertDingDanMingXi(intHuoYunDanID, intHuoWuCheLiangID, intCheLiangShuLiang, ZhiXiaoCheFou).Tables[0].Rows[0][0]); //遍历当前货运单明细的数量,新增车辆表 for (int i = 0; i < intCheLiangShuLiang; i++) { string strNumber;//生成发动机号/车架号/钥匙号 //获取单数 strDanShu = myfrm_DingDanGuanLi_DingDanGuanLi_InsertClient.frm_DingDanGuanLi_Insert_SelectZuiDaDanHaoShu().Tables[0].Rows[0][0].ToString().Trim(); switch (strDanShu.Length) { case 1: strDanShu = "000" + strDanShu; break; case 2: strDanShu = "00" + strDanShu; break; case 3: strDanShu = "0" + strDanShu; break; default: break; } //生成发动机号/车架号/钥匙号 strNumber = ShengChengDanHao(strDanShu); string strFaDongJiHao = "FD" + strNumber; string strCheJiaHao = "CJH" + strNumber; string strYaoShiHao = "YS" + strDanShu; //新增到车辆表 myfrm_DingDanGuanLi_DingDanGuanLi_InsertClient.frm_DingDanGuanLi_Insert_btnBaoCunClick_InsertCarXinXi(intHuoYunDanMingXiID, strCheJiaHao, strFaDongJiHao, intCheZhongID, intCheXingID, intCheShengYanSeID, intBianSuXiangID, decJinHuoJiaGe, intShengChangChangJiaID, strYaoShiHao, intNeiShiYanSeID, ZhiXiaoCheFou); } intChengGongTianJia++;//成功添加,用于判断是否添加成功!! } } else { MessageBox.Show("新增货运单失败!!!"); } if(intYanZheng==intChengGongTianJia&&intChengGongTianJia>0) { MessageBox.Show("新增货运单成功!!!"); } else { MessageBox.Show("新增货运单失败!!!"); } }
本文仅供学习,禁止用于商业活动,否则后果自负!!!
相关文章推荐
- 4.制定测试计划
- 图的深度优先遍历
- EF----实体框架集合
- Codeforces Round #305 (Div. 1)E. Mike and Friends【后缀数组+线段树】
- 2015百度之星初赛1 1004 kpi题解(set的运用)
- java.lang.OutOfMemoryError: PermGen space的解决方案
- 登录
- sqlite3使用简介
- 搬家了
- 缓存之Memcached
- Android---51---加入多线程进行Socket通信
- x86_64汇编基础
- JavaScript 开发的45个经典技巧
- 在Winform中调用Dos命令
- Mandriva CEO称雇员诉讼迫使公司宣布破产
- Volley 源码解析
- 第十二周项目三-日期时间类
- 查找和替换
- May
- [Linux]grep删除空行