




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第5章第6節(jié)采購單管理
董久敏本節(jié)學(xué)習(xí)要點(diǎn)1.采購單的管理。2.采購單明細(xì)的管理。3.采購信息查詢。任務(wù)1
—存儲過程的設(shè)計
1.實(shí)現(xiàn)存儲過程、DAO的設(shè)計。2.實(shí)現(xiàn)采購單管理的設(shè)計。3.實(shí)現(xiàn)采購明細(xì)管理的設(shè)計。任務(wù)目標(biāo)
1..存儲過程的應(yīng)用。
2.委托的應(yīng)用。
知識要點(diǎn)任務(wù)1
—存儲過程的設(shè)計主要代碼說明添加標(biāo)題文字添加標(biāo)題文字一、插入采購單記錄、采購?fù)素泦斡涗?-功能描述:向采購單主表PurchaseMaster添加采購單記錄,--同時修改供應(yīng)商表Supplier對應(yīng)供貨商的最近供貨日期createprocprocInsertForPurchaseMaster@PurchaseIDchar(8),@PurchaseDatedatetime=null,@SupplierIDchar(8),@SubTotaldecimal(18,2),@PurchasePropertybit=1--1采購單記錄,0采購?fù)素泦斡涗汚sdeclare@errint--保存錯誤碼@@error累加和if@PurchaseDate=nullbegin任務(wù)1
—存儲過程的設(shè)計主要代碼說明添加標(biāo)題文字添加標(biāo)題文字set@PurchaseDate=GETDATE()endsetXACT_ABORTonbegintransaction
--向采購單主表PurchaseMaster添加采購單記錄insertPurchaseMaster(PurchaseID,PurchaseDate,SupplierID,PurchaseProperty,SubTotal)values(@PurchaseID,@PurchaseDate,@SupplierID,@PurchaseProperty,@SubTotal)set@err=@err+@@error--累加錯誤碼if@PurchaseProperty=1begin
--修改供應(yīng)商表Supplier,對應(yīng)供應(yīng)商的最后送貨日期updateSuppliersetLastDeliveryDate=@PurchaseDatewhereSupplierID=@SupplierID主要代碼說明添加標(biāo)題文字添加標(biāo)題文字set@err=@err+@@errorendif@err<>0--操作出錯,回滾事務(wù)beginrollbacktranendelse--操作成功,回滾事務(wù)begincommittranend說明:1.添加采購單記錄的同時需要修改對應(yīng)供應(yīng)商的最近供貨日期,因此需要事務(wù)管理。任務(wù)1
—存儲過程的設(shè)計主要代碼說明添加標(biāo)題文字添加標(biāo)題文字2.在事務(wù)管理中,完成一個操作后,將@@error累加到@err中,當(dāng)事務(wù)中的所有操作完成后,@@error=0,則說明所有操作成功,提交事務(wù);@@error<>0,則說明操作有不成功的,回滾事務(wù)。
二、插入采購明細(xì)表記錄--功能描述:向采購明細(xì)表PurchaseDetail添加記錄,同時修改商品表Product對應(yīng)商品的庫存數(shù)量、最近的進(jìn)貨日期。createprocprocInsertForPurchaseDetail@PurchaseIDchar(8),@ProductIDchar(8),@PurchaseQuantitydecimal(18,0),@PurchaseUnitPricedecimal(18,2),@PurchaseAmountdecimal(18,2)as任務(wù)1
—存儲過程的設(shè)計主要代碼說明添加標(biāo)題文字添加標(biāo)題文字declare@PurchasePropertybitdeclare@LastPurchaseDatedatetimedeclare@errintselect@LastPurchaseDate=PurchaseDate,@PurchaseProperty=PurchasePropertyfromPurchaseMasterwherePurchaseID=@PurchaseIDsetXACT_ABORTonbegintransaction
--向采購明細(xì)表PurchaseDetail添加記錄insertPurchaseDetail(PurchaseID,ProductID,PurchaseQuantity,PurchaseUnitPrice,PurchaseAmount)values(@PurchaseID,@ProductID,@PurchaseQuantity,@PurchaseUnitPrice,@PurchaseAmount)
任務(wù)1
—存儲過程的設(shè)計主要代碼說明添加標(biāo)題文字添加標(biāo)題文字set@err=@err+@@errorif@PurchaseProperty=1--插入采購單明細(xì)記錄begin
--修改商品表Product中該商品的數(shù)量updateProductsetQuantity=Quantity+@PurchaseQuantitywhereProductID=@ProductIDendelse--插入采購?fù)素泦蚊骷?xì)記錄begin
--修改商品表Product中該商品的數(shù)量updateProductsetQuantity=Quantity-@PurchaseQuantitywhereProductID=@ProductIDend任務(wù)1
—存儲過程的設(shè)計主要代碼說明添加標(biāo)題文字添加標(biāo)題文字set@err=@err+@@errorif@PurchaseProperty=1begin
--修改商品表Product中該商品最后進(jìn)貨日期updateProductsetLastPurchaseDate=@LastPurchaseDatewhereProductID=@ProductIDset@err=@err+@@errorendif@err<>0beginrollbacktranendelse任務(wù)1
—存儲過程的設(shè)計主要代碼說明添加標(biāo)題文字添加標(biāo)題文字begincommittranend
說明:1.向采購明細(xì)表PurchaseDetail添加記錄,同時修改商品表Product對應(yīng)商品的庫存數(shù)量、最近的進(jìn)貨日期。2.采購明細(xì)表中,字段PurchaseProperty=1,代表采購明細(xì),PurchaseProperty=0,代表采購?fù)素浢骷?xì)。
其它存儲過程不再說明。
任務(wù)1
—存儲過程的設(shè)計
1.實(shí)現(xiàn)PurchaseManageDAO的設(shè)計:(1)實(shí)現(xiàn)添加、修改采購單函數(shù)的設(shè)計。(2)實(shí)現(xiàn)刪除采購單函數(shù)的設(shè)計。任務(wù)目標(biāo)
1.類和函數(shù)的設(shè)計。2.事務(wù)管理的設(shè)計知識要點(diǎn)任務(wù)2
—主要DAO的設(shè)計主要代碼說明添加標(biāo)題文字添加標(biāo)題文字
說明:以下兩個函數(shù)在PurchaseManageDAO類中,
請參見DataAccessLayer\PurchaseManageDAO.cs文件。
一、添加、修改采購單函數(shù)///<summary>///1.向采購單主表PurchaseMaster添加記錄///2.修改采購單主表PurchaseMaster中的記錄///3.向采購單明細(xì)表PurchaseDetail添加記錄///4.修改采購單明細(xì)表PurchaseDetail中的記錄///5.刪除采購單明細(xì)表PurchaseDetail中的記錄///以上操作完成后,一次性地保存到數(shù)據(jù)庫中///</summary>任務(wù)2
—主要DAO的設(shè)計主要代碼說明添加標(biāo)題文字添加標(biāo)題文字///<paramname="mastertype">類型:string,操作類型:///mastertype==“I”,向采購單主表添加記錄;///mastertype=="U",修改采購單主表中的記錄</param>///<paramname="master_parameters">類型:IList<PurchaseMaster>,///要添加(修改)的采購單集合</param>///<paramname="insert_parameters">類型:IList<PurchaseDetail>,///要添加的采購明細(xì)集合</param>///<paramname="update_parameters">類型:IList<PurchaseDetail>,///要修改的采購明細(xì)集合</param>///<paramname="del_parameters">類型:IList<int>,要刪除的采購///明細(xì)記錄對應(yīng)的主鍵集合</param>///<returns>類型:bool,執(zhí)行成功:true,否則為false</returns>任務(wù)2
—主要DAO的設(shè)計主要代碼說明添加標(biāo)題文字添加標(biāo)題文字publicboolinsert_update_del(stringmastertype,IList<PurchaseMaster>master_parameters,IList<PurchaseDetail>insert_parameters,IList<PurchaseDetail>update_parameters,IList<int>del_parameters){//保存要執(zhí)行的SQL命令集合
IList<string>sqls=newList<string>();//保存對采購單主表PurchaseMaster操作對應(yīng)的SqlParameter對象集合
IList<SqlParameter[]>parameters_master=newList<SqlParameter[]>();//保存執(zhí)行添加采購明細(xì)命令對應(yīng)的SqlParameter對象集合IList<SqlParameter[]>parameters_insert=newList<SqlParameter[]>();//保存執(zhí)行修改采購明細(xì)命令對應(yīng)的SqlParameter對象集合
IList<SqlParameter[]>parameters_update=newList<SqlParameter[]>();任務(wù)2
—主要DAO的設(shè)計主要代碼說明添加標(biāo)題文字添加標(biāo)題文字//保存執(zhí)行刪除采購明細(xì)命令對應(yīng)的SqlParameter對象集合
IList<SqlParameter>parameters_delete=newList<SqlParameter>();//(1)判斷對采購主表插入記錄/修改記錄
if(mastertype=="I")//向采購主表插入記錄
{//存儲過程名稱
sqls.Add("procInsertForPurchaseMaster");}elseif(mastertype=="U")//修改采購主表中的記錄
{//存儲過程名稱
sqls.Add("procUpdateForPurchaseMaster");}//添加參數(shù)
SqlParameter[]parameters=newSqlParameter[5];任務(wù)2
—主要DAO的設(shè)計主要代碼說明添加標(biāo)題文字添加標(biāo)題文字parameters[0]=newSqlParameter("@PurchaseID",SqlDbType.Char,8);parameters[1]=newSqlParameter("@PurchaseDate",SqlDbType.DateTime);parameters[2]=newSqlParameter("@SupplierID",SqlDbType.Char,8);parameters[3]=newSqlParameter("@SubTotal",SqlDbType.Decimal);parameters[4]=newSqlParameter("@PurchaseProperty",SqlDbType.Bit);//為參數(shù)賦值
PurchaseMasterpm=master_parameters[0];parameters[0].Value=pm.PurchaseID;parameters[1].Value=pm.PurchaseDate;parameters[2].Value=pm.SupplierID;任務(wù)2
—主要DAO的設(shè)計主要代碼說明添加標(biāo)題文字添加標(biāo)題文字parameters[3].Value=pm.SubTotal;parameters[4].Value=pm.PurchaseProperty;//添加到參數(shù)集合中
parameters_master.Add(parameters);//(2)判斷是否向采購單明細(xì)表中添加記錄
if(insert_parameters!=null)//如果需要向采購明細(xì)表中添加記錄
{//存儲過程名稱
sqls.Add("procInsertForPurchaseDetail");//將對象集合中的對象依次讀出,生成對應(yīng)SqlParameter對象,并添加到參數(shù)集合中
foreach(PurchaseDetailentityininsert_parameters){SqlParameter[]insertparameters=newSqlParameter[5];任務(wù)2
—主要DAO的設(shè)計主要代碼說明添加標(biāo)題文字添加標(biāo)題文字insertparameters[0]=newSqlParameter("@PurchaseID",SqlDbType.Char,8);insertparameters[1]=newSqlParameter("@ProductID",SqlDbType.Char,8);insertparameters[2]=newSqlParameter("@PurchaseQuantity",SqlDbType.Decimal);insertparameters[3]=newSqlParameter("@PurchaseUnitPrice",SqlDbType.Decimal);insertparameters[4]=newSqlParameter("@PurchaseAmount",SqlDbType.Decimal);insertparameters[0].Value=entity.PurchaseID;insertparameters[1].Value=entity.ProductID;任務(wù)2
—主要DAO的設(shè)計主要代碼說明添加標(biāo)題文字添加標(biāo)題文字insertparameters[2].Value=entity.PurchaseQuantity;insertparameters[3].Value=entity.PurchaseUnitPrice;insertparameters[4].Value=entity.PurchaseAmount;parameters_insert.Add(insertparameters);}}else//不需要向采購明細(xì)表中添加記錄
{sqls.Add(null);}任務(wù)2
—主要DAO的設(shè)計主要代碼說明添加標(biāo)題文字添加標(biāo)題文字//(3)判斷是否修改采購單明細(xì)表中的記錄
if(update_parameters!=null)//如果需要修改采購單明細(xì)表中的記錄
{//存儲過程名稱
sqls.Add("procUpdateForPurchaseDetail");foreach(PurchaseDetailentityinupdate_parameters){SqlParameter[]updateparameters=newSqlParameter[6];updateparameters[0]=newSqlParameter("@PurchaseID",SqlDbType.Char,8);updateparameters[1]=newSqlParameter("@ProductID",SqlDbType.Char,8);updateparameters[2]=newSqlParameter("@PurchaseQuantity",SqlDbType.Decimal);任務(wù)2
—主要DAO的設(shè)計任務(wù)2
—主要DAO的設(shè)計主要代碼說明添加標(biāo)題文字添加標(biāo)題文字updateparameters[3]=newSqlParameter("@PurchaseUnitPrice",SqlDbType.Decimal);updateparameters[4]=newSqlParameter("@PurchaseAmount",SqlDbType.Decimal);updateparameters[5]=newSqlParameter("@PurchaseDetailID",SqlDbType.Int);updateparameters[0].Value=entity.PurchaseID;updateparameters[1].Value=entity.ProductID;updateparameters[2].Value=entity.PurchaseQuantity;updateparameters[3].Value=entity.PurchaseUnitPrice;updateparameters[4].Value=entity.PurchaseAmount;updateparameters[5].Value=entity.PurchaseDetailID;parameters_update.Add(updateparameters);}}任務(wù)2
—主要DAO的設(shè)計主要代碼說明添加標(biāo)題文字添加標(biāo)題文字else//不需要修改采購單明細(xì)表中的記錄
{sqls.Add(null);}//(4)判斷是否刪除采購單明細(xì)表中的記錄
if(del_parameters!=null)//如果需要刪除采購單明細(xì)表中的記錄
{sqls.Add("proDeleteForPurchaseDetail");//存儲過程名稱
foreach(intidindel_parameters){SqlParameterdelparameters=newSqlParameter("@PurchaseDetailID",SqlDbType.Int);delparameters.Value=id;parameters_delete.Add(delparameters);}}主要代碼說明添加標(biāo)題文字添加標(biāo)題文字else//不需要刪除采購單明細(xì)表中的記錄
{sqls.Add(null);}returnnewDB().executeTransaction_few(sqls,parameters_master,parameters_insert,parameters_update,parameters_delete);}
說明:1.本函數(shù)實(shí)現(xiàn)的功能:添加、修改采購單主表中的記錄,同時添加、修改、刪除對應(yīng)的采購明細(xì)
,以上操作完成后,一次性保存到物理數(shù)據(jù)庫中。2.insert_parameters,保存著要添加的采購明細(xì)對象集合,沒有要添加的采購明細(xì),則.insert_parameters=null。任務(wù)2
—主要DAO的設(shè)計主要代碼說明添加標(biāo)題文字添加標(biāo)題文字3.update_parameters,保存著要修改的采購明細(xì)對象集合,沒有要修改的采購明細(xì),則.update_parameters=null。4.del_parameters,保存著要刪除的采購明細(xì)記錄的主關(guān)鍵字集合,沒有要刪除的采購明細(xì),則.del_parameters=null。5.sqls保存著要執(zhí)行的SQL語句。sqls[0]:對采購單主表執(zhí)行的命令;sqls[1]:添加采購明細(xì)的命令,沒有添加的記錄,則sql[1]=null;sqls[2]:修改采購明細(xì)的命令,沒有修改的記錄,則sql[2]=null;sqls[3]:刪除采購明細(xì)的命令,沒有刪除的記錄,則sql[3]=null。6.應(yīng)用本函數(shù)的兩種情形:(1)添加采購單主表記錄,同時添加采購明細(xì)。(2)修改采購單主表記錄,同時添加、修改、刪除采購明細(xì)7.采購單主表PurchaseMaster與采購單明細(xì)表PurchaseDetail,存在主外鍵的關(guān)系,因此要刪除主表中的記錄,應(yīng)先刪除對應(yīng)的明細(xì)記錄。
任務(wù)2
—主要DAO的設(shè)計主要代碼說明添加標(biāo)題文字添加標(biāo)題文字8.因?yàn)楸竞瘮?shù)先執(zhí)行對主表的操作,基于7.中所提原因,所以本函數(shù)不具備刪除主表記錄的功能。
二、刪除采購單記錄函數(shù)(同時刪除它對應(yīng)的采購單明細(xì)記錄)///<summary>///刪除采購主表PurchaseMaster中的記錄及其對應(yīng)的采購明細(xì)///</summary>///<paramname="purchaseID">類型:string,要刪除的采購主表記錄對應(yīng)的主鍵</param>///<paramname="purchaseDetailIDs">類型:IList<int>,要刪除的采購明細(xì)對應(yīng)的主鍵集合</param>///<returns>類型:bool,執(zhí)行成功:true,否則為false</returns>
任務(wù)2
—主要DAO的設(shè)計主要代碼說明添加標(biāo)題文字添加標(biāo)題文字publicbooldeleteForPurchaseMaster(stringpurchaseID,IList<int>purchaseDetailIDs){//(1)設(shè)置采購單主表參數(shù)
stringmastersql="procDeleteForPurchaseMaster";SqlParameter[]masterparameter=newSqlParameter[1];masterparameter[0]=newSqlParameter("@PurchaseID",SqlDbType.Char,8);masterparameter[0].Value=purchaseID;IList<SqlParameter[]>masterparametrs=newList<SqlParameter[]>();masterparametrs.Add(masterparameter);
//(2)設(shè)置采購單明細(xì)表參數(shù)
stringdetailsql="proDeleteForPurchaseDetail";IList<SqlParameter>deltailparameters=newList<SqlParameter>();
任務(wù)2
—主要DAO的設(shè)計任務(wù)2
—主要DAO的設(shè)計主要代碼說明添加標(biāo)題文字添加標(biāo)題文字
//依次生成刪除采購明細(xì)對應(yīng)的SqlParameter對象集合
foreach(intidinpurchaseDetailIDs){SqlParameterparameter=newSqlParameter("@PurchaseDetailID",SqlDbType.Int);parameter.Value=id;deltailparameters.Add(parameter);}IList<string>sqls=newList<string>();sqls.Add(mastersql);//添加刪除主表記錄的命令
sqls.Add(null);//沒有添加明細(xì)表記錄的命令
sqls.Add(null);//沒有修改明細(xì)表記錄的命令
sqls.Add(detailsql);//添加刪除明細(xì)表記錄的命令
returnnewDB().executeTransaction_few_del(sqls,masterparametrs,null,null,deltailparameters);}任務(wù)2
—主要DAO的設(shè)計主要代碼說明添加標(biāo)題文字添加標(biāo)題文字說明:1.因?yàn)椴少弳沃鞅鞵urchaseMaster與采購明細(xì)表PurchaseDetail之間存在主外鍵關(guān)系,所以在刪除主表的記錄之前,必須先刪除其對應(yīng)的明細(xì),本函數(shù)實(shí)現(xiàn)了這樣的功能。2在上面的函數(shù)一、中,先執(zhí)行對主表的操作,后執(zhí)行對明細(xì)表的操作,所以不能實(shí)現(xiàn)對主表記錄的刪除操作。任務(wù)3
—模塊通用類的設(shè)計說明添加標(biāo)題文字添加標(biāo)題文字說明:1.要刪除采購單(即退貨)時,需要首先判斷退貨單明細(xì)對應(yīng)的商品庫存是否滿足條件,即商品的庫存量-退貨商品數(shù)量>=0時,可以刪除(退貨),否則條件不滿足,不能退貨。2.在采購管理模塊中,判斷一種商品的庫存是否滿足條件,在多個窗體中用到,因此將這一功能設(shè)計在模塊通用類中。
3.模塊通用類分包含兩個類:(1)類ProductDetailViewUtil提供的功能:分類統(tǒng)計一個采購單明細(xì)中每一種商品的數(shù)量。(2)類checkPurchaseProducts提供的功能:判斷商品的庫存是否滿足條件。任務(wù)3
—模塊通用類的設(shè)計主要代碼說明添加標(biāo)題文字添加標(biāo)題文字
一、分類匯總采購明細(xì)中每種商品的購進(jìn)貨數(shù)量或退貨數(shù)量
(
請參見Common.viewutil\ProductDetailViewUtil.cs)///<summary>///分類匯總采購明細(xì)中每種商品的采購進(jìn)貨數(shù)量或退貨數(shù)量///</summary>///<paramname="items">類型:IList<PurchaseDetail>,采購單中的采購明細(xì)</param>///<returns>類型:Dictionary<string,Product>,分類匯總結(jié)果</returns>publicstaticDictionary<string,Product>getCheckPurchaseProducts(IList<PurchaseDetail>items){Dictionary<string,Product>products=newDictionary<string,Product>();任務(wù)3
—模塊通用類的設(shè)計主要代碼說明添加標(biāo)題文字添加標(biāo)題文字
//循環(huán)的作用:依次統(tǒng)計每種商品的數(shù)量
foreach(PurchaseDetailiteminitems){//如果統(tǒng)計集合中沒有正在統(tǒng)計的商品,則添加到統(tǒng)計集合中
if(!products.ContainsKey(item.ProductID)){Productp=newProduct();p.ProductID=item.ProductID;p.Quantity=item.PurchaseQuantity;products.Add(item.ProductID,p);}else//如果正在統(tǒng)計的商品已經(jīng)在統(tǒng)計集合中,則直接修改其數(shù)量
{Productp=products[item.ProductID];p.Quantity=p.Quantity+item.PurchaseQuantity;products[item.ProductID]=p;}任務(wù)3
—模塊通用類的設(shè)計主要代碼說明添加標(biāo)題文字添加標(biāo)題文字}returnproducts;}
說明:1.參數(shù)items,是采購單中的明細(xì),一種商品在明細(xì)中可能有多個記錄。本函數(shù)的功能:將明細(xì)中一種商品的多條記錄中的商品數(shù)量合并統(tǒng)計到一條記錄中,并去掉多余的記錄。2.統(tǒng)計結(jié)果類型為Dictionary<string,Product>,其中的鍵為ProductID,值為分類匯總后的商品。
二、檢查商品庫存數(shù)量是否滿足刪除采購單記錄或退貨的條件函數(shù)
(請參見Common\viewutil\PurchaseView.cs)任務(wù)3
—模塊通用類的設(shè)計主要代碼說明添加標(biāo)題文字添加標(biāo)題文字///<summary>///檢查商品庫存數(shù)量是否滿足刪除采購單記錄或退貨的條件,///如果不滿足刪除條件,則拋出異常///</summary>///<paramname="pd">類型:IList<PurchaseDetail>,采購單中采購明細(xì)</param>publicstaticvoidcheckPurchaseProducts(IList<PurchaseDetail>pd){//檢查將要刪除的商品的數(shù)量是否小于庫存數(shù)量Dictionary<string,Product>checkProducts=ProductDetailViewUtil.getCheckPurchaseProducts(pd);Dictionary<string,Product>.Enumeratorenumerator=checkProducts.GetEnumerator();任務(wù)3
—模塊通用類的設(shè)計主要代碼說明添加標(biāo)題文字添加標(biāo)題文字
//循環(huán)的作用:依次判斷每種商品的庫存是否滿足條件
while(enumerator.MoveNext()){//獲取鍵/值對中的值
Productp=enumerator.Current.Value;//根據(jù)商品編號取得庫中商品信息ProductorgProduct=ProductService.query(p.ProductID);
//判斷該商品的庫存是否滿足條件
if(orgProduct.Quantity-p.Quantity<0){thrownewSPException(string.Format(ConstantValues.STOCK_NOT_ENOGHT_MSG,p.ProductID,orgProduct.ProductName));}}}任務(wù)3
—模塊通用類的設(shè)計主要代碼說明添加標(biāo)題文字添加標(biāo)題文字說明:1.本函數(shù)的功能:(1)調(diào)用函數(shù)一、將要刪除的采購單中的明細(xì)進(jìn)行分類匯總出每一種商品的采購數(shù)量。(2)將(1)中匯總好的每種商品采購數(shù)量與商品表Product對應(yīng)商品的庫存進(jìn)行比較,判斷是否滿足庫存條件即商品的庫存量-退貨商品數(shù)量>=0,如果其中有不滿足的,則拋出異常。2.Dictionary<string,Product>對象集合,每個成員包含鍵/值對,可以根據(jù)鍵名來讀取其對應(yīng)的值。
1.實(shí)現(xiàn)采購單管理界面的設(shè)計。任務(wù)目標(biāo)
1.DataGridView控件等。
2.委托的應(yīng)用。知識要點(diǎn)任務(wù)4
—采購單管理界面的設(shè)計任務(wù)4
—采購單管理界面的設(shè)計說明添加標(biāo)題文字添加標(biāo)題文字說明:1.采購單管理界面是管理采購信息的主界面,可以直接實(shí)現(xiàn)對采購單記錄的刪除;添加采購單記錄、修改采購單記錄,會分別打開新的窗體界面,從而實(shí)現(xiàn)有關(guān)的操作。2.界面設(shè)計請參見下面的圖5-6-1所示。3源文件請參見frmPurchaseList.cs。任務(wù)4
—采購單管理界面的設(shè)計添加標(biāo)題文字添加標(biāo)題文字圖5-6-1采購單管理界面任務(wù)4
—采購單管理界面的設(shè)計主要代碼說明添加標(biāo)題文字添加標(biāo)題文字一、委托的定義namespaceSuperMarket{publicdelegatevoidbindDataInvoke(stringpurchaseID);publicpartialclassfrmPurchaseList:Form//采購單主表管理窗體
{......//(由修改采購信息窗體返回后)刷新采購單管理窗體
privatevoidrefresh(stringpurchaseID){bindData();bindData_Detail(purchaseID);}......}}任務(wù)4
—采購單管理界面的設(shè)計說明添加標(biāo)題文字添加標(biāo)題文字說明:1.在此定義的委托,將在修改按鈕的單擊事件過程中用到:即frmPurchaseInfo_UpdatefrmPIU=newfrmPurchaseInfo_Update(newbindDataInvoke(refresh));2.這樣將該委托的一個對象,傳遞到修改采購單界面frmPIU中
,從而實(shí)現(xiàn)在frmPIU界面中通過這個委托對象刷新上一級窗體的功能。3refresh函數(shù)的代碼請參見一、。
二、修改按鈕的單擊事件過程privatevoidbtnUpdate_Click(objectsender,EventArgse){lblmsg.Text=string.Empty;intn=dgvPurchaseMaster.SelectedRows.Count;//保存采購訂單主表的當(dāng)前記錄
intm=dgvPurchaseMaster.CurrentRow.Index;任務(wù)4
—采購單管理界面的設(shè)計主要代碼說明添加標(biāo)題文字添加標(biāo)題文字
//如果沒有選中要修改的采購單記錄,則返回。
if(n<=0){lblmsg.Text="請選擇要修改的采購單主表記錄";return;}//保存當(dāng)前的采購主表記錄(準(zhǔn)備傳遞到修改界面)
ViewPurchaseMasterListpm=newViewPurchaseMasterList();pm.PurchaseID=dgvPurchaseMaster.CurrentRow.Cells["colPurchaseID"].Value.ToString();pm.PurchaseDate=Convert.ToDateTime(dgvPurchaseMaster.CurrentRow.Cells["colPurchaseDate"].Value.ToString());pm.SupplierID=dgvPurchaseMaster.CurrentRow.Cells["colSupplierID"].Value.ToString();任務(wù)4
—采購單管理界面的設(shè)計主要代碼說明添加標(biāo)題文字添加標(biāo)題文字pm.SupplierSimpleName=dgvPurchaseMaster.CurrentRow.Cells["colSupplierSimpleName"].Value.ToString();pm.SubTotal=decimal.Parse(dgvPurchaseMaster.CurrentRow.Cells["colSubTotal"].Value.ToString());//保存當(dāng)前的采購主表記錄對應(yīng)的采購明細(xì)(準(zhǔn)備傳遞到修改界面)
IList<ViewPurchaseDetailList>items=newList<ViewPurchaseDetailList>();foreach(DataGridViewRowrindgvPurchaseDetail.Rows){ViewPurchaseDetailListitem=newViewPurchaseDetailList();item.PurchaseDetailID=int.Parse(r.Cells["colPurchaseDetailID"].Value.ToString());任務(wù)4
—采購單管理界面的設(shè)計說明添加標(biāo)題文字添加標(biāo)題文字item.PurchaseID=r.Cells["colPurchaseID2"].Value.ToString();item.ProductID=r.Cells["colProductID"].Value.ToString();item.ProductName=r.Cells["colProductName"].Value.ToString();item.PurchaseUnitPrice=decimal.Parse(r.Cells["colPurchaseUnitPrice"].Value.ToString());item.PurchaseQuantity=decimal.Parse(r.Cells["colPurchaseQuantity"].Value.ToString());item.PurchaseAmount=decimal.Parse(r.Cells["colPurchaseAmount"].Value.ToString());items.Add(item);}
//將委托對象bindDataInvoke通過窗體類rmPurchaseInfo_Update的構(gòu)造函數(shù)傳遞給子窗體frmPIU(修改記錄界面),/從而實(shí)現(xiàn)在子窗體中刷新父窗體的功能。當(dāng)由子窗體返回父窗體時,父窗體會顯示修改后的新信息。任務(wù)4
—采購單管理界面的設(shè)計說明添加標(biāo)題文字添加標(biāo)題文字frmPurchaseInfo_UpdatefrmPIU=newfrmPurchaseInfo_Update(newbindDataInvoke(refresh));//setValues為委托對象,初始化frmPurchaseInfo_Update窗體中的控件frmPIU.setValues(pm,items
frmPIU.ShowDialog(this);//顯示修改界面
//關(guān)閉修改窗體frmPIU后,執(zhí)行以下語句
dgvPurchaseMaster.ClearSelection();//清除所有選中項(xiàng)
//重新選中修改前選中的采購單主表記錄
dgvPurchaseMaster.Rows[m].Selected=true;}
說明:1.主要功能:(1)將窗體中選中的(要修改的)采購單主表記錄的數(shù)據(jù)封裝到對象pm中。
任務(wù)4
—采購單管理界面的設(shè)計主要代碼說明添加標(biāo)題文字添加標(biāo)題文字(2)將對應(yīng)的采購明細(xì),封裝到對象,并添加到對象集合items中。2.frmPIU.setValues(pm,items):setValues為窗體frmPIU中定義的委托對象,其功能:用pm,items初始化修改采購單界面frmPIU。具體功能請參見窗體類frmPurchaseInfo_Update中的介紹。3.先用.frmPIU.setValues(pm,items)初始化該窗體,然后顯示該窗體。4.dgvPurchaseMaster.Rows[m].Selected=true;在關(guān)閉修改窗體frmPIU后執(zhí)行此語句,其作用為重新選中修改前選中的采購單主表記錄。任務(wù)4
—采購單管理界面的設(shè)計主要代碼說明添加標(biāo)題文字添加標(biāo)題文字三、刪除按鈕的單擊事件過程privatevoidbtnDelete_Click(objectsender,EventArgse){lblmsg.Text=string.Empty;intn=dgvPurchaseMaster.SelectedRows.Count;if(n<=0){lblmsg.Text="請選擇要刪除的采購單主表記錄";return;}//獲取要刪除采購單記錄的主鍵PurchaseID值
stringpurchaseID=dgvPurchaseMaster.CurrentRow.Cells["colPurchaseID"].Value.ToString();任務(wù)4
—采購單管理界面的設(shè)計主要代碼說明添加標(biāo)題文字添加標(biāo)題文字if(MessageBox.Show("您確定刪除采購單表采購單編號為:"+purchaseID+"的記錄嗎?","提示信息",MessageBoxButtons.OKCancel)==DialogResult.Cancel){return;}//獲取采購單主表記錄對應(yīng)的采購明細(xì)
IList<PurchaseDetail>items=newList<PurchaseDetail>();foreach(DataGridViewRowrindgvPurchaseDetail.Rows){PurchaseDetailitem=newPurchaseDetail();item.PurchaseDetailID=int.Parse(r.Cells["colPurchaseDetailID"].Value.ToString());item.PurchaseID=r.Cells["colPurchaseID2"].Value.ToString();任務(wù)4
—采購單管理界面的設(shè)計主要代碼說明添加標(biāo)題文字添加標(biāo)題文字item.ProductID=r.Cells["colProductID"].Value.ToString();item.PurchaseUnitPrice=decimal.Parse(r.Cells["colPurchaseUnitPrice"].Value.ToString());item.PurchaseQuantity=decimal.Parse(r.Cells["colPurchaseQuantity"].Value.ToString());item.PurchaseAmount=decimal.Parse(r.Cells["colPurchaseAmount"].Value.ToString());items.Add(item);}//檢查庫存是否滿足條件,如果不滿足條件,在捕獲異常后返回。
try{PurchaseView.checkPurchaseProducts(items);}任務(wù)4
—采購單管理界面的設(shè)計主要代碼說明添加標(biāo)題文字添加標(biāo)題文字catch(SPExceptionex){lblmsg.Text=ex.Message;return;//throwex;}//刪除采購單主表記錄及其對應(yīng)的采購明細(xì)記錄
IList<int>keys=newList<int>();foreach(PurchaseDetailiteminitems){//獲取將要刪除的采購明細(xì)記錄的主鍵集合
keys.Add(item.PurchaseDetailID);}任務(wù)4
—采購單管理界面的設(shè)計主要代碼說明添加標(biāo)題文字添加標(biāo)題文字boolflag=PurchaseManageService.deleteForPurchaseMaster(purchaseID,keys);if(flag){lblmsg.Text="刪除記錄成功";bindData();dgvPurchaseDetail.DataSource=null;}else{lblmsg.Text="刪除記錄失敗";}}任務(wù)4
—采購單管理界面的設(shè)計說明添加標(biāo)題文字添加標(biāo)題文字說明:1.刪除采購單記錄主要分為以下步驟:(1)獲取要刪除的采購單主表記錄的主鍵;(2)獲取采購單主表記錄對應(yīng)的采購明細(xì);(3)檢查要刪除的采購明細(xì)是否滿足庫存條件,如果滿足條件,
則轉(zhuǎn)到(4),否則,轉(zhuǎn)到(6);(4)獲取要刪除的采購明細(xì)記錄的主鍵集合;(5)執(zhí)行刪除操作;(6)退出。2.PurchaseView.checkPurchaseProducts(items);檢查要刪除的采購明細(xì)是否滿足庫存條件,如果不滿足條件,則拋出SPException類型異常。
任務(wù)5
—修改采購單信息界面的設(shè)計說明添加標(biāo)題文字添加標(biāo)題文字說明:1.修改采購單信息界面實(shí)現(xiàn)對采購單主表記錄的修改、對其對應(yīng)的采購明細(xì)的添加、修改、刪除的操作。2.界面設(shè)計請參見下面的圖5-6-2所示。3源文件請參frmPurchaseInfo_Update.cs。任務(wù)5
—修改采購單信息界面的設(shè)計添加標(biāo)題文字添加標(biāo)題文字圖5-6-2修改采購單信息界面任務(wù)5
—修改采購單信息界面的設(shè)計主要代碼說明添加標(biāo)題文字添加標(biāo)題文字一、定義委托等namespaceSuperMarket{publicdelegatevoidsetValueInvoke(ViewPurchaseMasterList_pm,IList<ViewPurchaseDetailList>_items);publicpartialclassfrmPurchaseInfo_Update:Form{//定義一個委托對象(函數(shù)的指針)
privatebindDataInvokebdi;//采購單明細(xì)DataGridView控件的數(shù)據(jù)源
privateIList<ViewPurchaseDetailList>items=newList<ViewPurchaseDetailList>();//保存新添加的采購單明細(xì)記錄privateIList<PurchaseDetail>insert_parameters=newList<PurchaseDetail>();任務(wù)5
—修改采購單信息界面的設(shè)計主要代碼說明添加標(biāo)題文字添加標(biāo)題文字
//保存修改過的(數(shù)據(jù)表中已經(jīng)存在的)的采購單明細(xì)記錄
privateDictionary<string,PurchaseDetail>updateitems=newDictionary<string,PurchaseDetail>();//保存將要刪除的(數(shù)據(jù)表中已經(jīng)存在的)采購單明細(xì)記錄的主鍵
privateIList<int>deletekeys=newList<int>();//委托:初始化控件的值
publicsetValueInvokesetValues;//帶參數(shù)的構(gòu)造函數(shù)
publicfrmPurchaseInfo_Update(bindDataInvoke_bdi){InitializeComponent();bdi=_bdi;setValues=newsetValueInvoke(setValue);
}
任務(wù)5
—修改采購單信息界面的設(shè)計主要代碼說明添加標(biāo)題文字添加標(biāo)題文字
//初始化窗體中的控件
privatevoidsetValue(ViewPurchaseMasterList_pm,IList<ViewPurchaseDetailList>_items){//以下語句初始化修改界面中與采購主表記錄有關(guān)的控件
txtPurchaseID.Text=_pm.PurchaseID;txtSupplierID.Text=_pm.SupplierID;dtpPurchaseDate.Value=_pm.PurchaseDate;txtSupplierSimpleName.Text=_pm.SupplierSimpleName;lblSubTotal.Text=_pm.SubTotal.ToString();//為修改界面中的采購明細(xì)列表綁定數(shù)據(jù)源
items=_items;bindData();}......}任務(wù)5
—修改采購單信息界面的設(shè)計說明添加標(biāo)題文字添加標(biāo)題文字
說明:1.publicdelegatevoidsetValueInvoke(ViewPurchaseMasterList_pm,IList<ViewPurchaseDetailList>_items);:定義委托,2.定義委托對象
publicsetValueInvokesetValues;3.構(gòu)造函數(shù):publicfrmPurchaseInfo_Update(bindDataInvoke_bdi)
{InitializeComponent();bdi=_bdi;setValues=newsetValueInvoke(setValue);
}
創(chuàng)建新窗體時,創(chuàng)建委托對象
任務(wù)5
—修改采購單信息界面的設(shè)計主要代碼說明添加標(biāo)題文字添加標(biāo)題文字4.privatevoidsetValue(ViewPurchaseMasterList_pm,IList<ViewPurchaseDetailList>_items){……}
通過窗體的構(gòu)造函數(shù)中的setValues=newsetValueInvoke(setValue);代碼,可以在創(chuàng)建窗體對象后,通過委托對象setValues,用_pm、_items中的數(shù)據(jù)初始化修改采購單信息界面。5.insert_parameter:保
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- ktv水果配送合同范本
- 人力轉(zhuǎn)讓合同范本
- 倉庫維修維護(hù)合同范本
- 出國合同范本ps
- 樂器進(jìn)貨合同范本
- 冰箱購買合同范例
- 單位清單合同范本
- 勞務(wù)服務(wù)發(fā)票合同范本
- 公司運(yùn)貨合同范本
- 協(xié)力商合同范本
- 2025年不停電電源(UPS)項(xiàng)目合作計劃書
- 2025年國家林業(yè)和草原局直屬事業(yè)單位第一批招聘應(yīng)屆畢業(yè)生96人歷年高頻重點(diǎn)模擬試卷提升(共500題附帶答案詳解)
- 2025年春季開學(xué)典禮校長講話稿-少年無畏凌云志扶搖直上入云蒼
- 2025寒假開學(xué)第一課 課件【1】
- 2025年湖南食品藥品職業(yè)學(xué)院高職單招職業(yè)適應(yīng)性測試近5年常考版參考題庫含答案解析
- 2024-2024年高考全國卷英語語法填空
- 會議會務(wù)服務(wù)投標(biāo)方案投標(biāo)文件(技術(shù)方案)
- 無違法犯罪記錄證明申請表(個人)
- (更新版)HCIA安全H12-711筆試考試題庫導(dǎo)出版-下(判斷、填空、簡答題)
- 華科版五年級全冊信息技術(shù)教案(共24課時)
- 《乒乓球》體育課教案(全)
評論
0/150
提交評論