开发工具与关键技术:Visual Studio 与C#
作者:黄灿
撰写时间:2019.7.16
以采购入库增加库存量为例
在采购入库中,每采购一个商品都有采购数量,采购回来的商品需要入库,入库后,库存的商品库存量就会增加。采购入库有采购入库的表和页面,库存也有一个库存表和查询库存页面。
首先在采购入库页面获取商品的信息然后使用数组的形式把数据传参到控制器
var ArrayStorageDetail
= [];
//获取table表格中的行
var tr = $("#tabDetail").find("tr");
//循环获取表格中的信息
for (var i = 1; i <
tr.length - 1; i++) {
//获取采购订单配件明细的信息
var PartsID = $("#PartsID" + i).val();//获取配件ID
var VehicleTypeID = $("#VehicleTypeID" + i).val();//获取车型ID
var Quantity = $("#Quantity" + i).val();//获取数量
var Discount = $("#Discount" + i).val();//获取折扣
var Money = $("#Money" + i).val();//获取金额
var WarehouseSpace = $("#WarehouseSpace" + i).val();//获取仓位
var Remark = $("#Remark" + i).val();//获取备注
var ArrayDetail = new Object();//申明一个对象
ArrayDetail = { PartsID: PartsID,
VehicleTypeID: VehicleTypeID, Quantity: Quantity, Discount: Discount, Money:
Money, WarehouseSpace: WarehouseSpace, Remark: Remark };
ArrayStorageDetail.push(ArrayDetail);
}
因为跨页面修改库存量不是在保存采购入库单的时候修改的,而是在保存完采购入库单之后审核采购入库单才修改库存量,保存采购入库单后采购入库单并不会生效,需要审核采购入库后采购入库单才会生效,所以是在采购入库单生效之后库存量才会增加。所以控制器使用List<SYS_PStorageDetail>
ArrayStorageDetail接收数据后先是修改采购入库单的Bit类型的true or false,然后再修改库存表里的库存量字段,因为后台接收到的数据是一个数组所以需要需要使用foreach循环数组里面的数据,采购入库不可能每次采购东欧采购一个商品,所以需要循环修改所有采购入库的商品的库存量,修改库存表的时候需要根据仓库和商品ID查询出相应的商品再进行修改
foreach (var ArrayDetail in ArrayStorageDetail)
{
//根据配件ID和供应商查询出一条数据,配件ID是循环获取的
SYS_WarehouseStorage dbWarehouseStorage
= (from tbWarehouseStorage in
myModels.SYS_WarehouseStorage
join tbParts in myModels.SYS_Parts on
tbWarehouseStorage.PartsID equals tbParts.PartsID
where
tbWarehouseStorage.PartsID == ArrayDetail.PartsID
select
tbWarehouseStorage).Single();
//提取需要修改的配件明细的库存量
dbWarehouseStorage.WarehouseID
= warehouseID;
dbWarehouseStorage.WarehouseStorage
= (int.Parse(dbWarehouseStorage.WarehouseStorage)
+ int.Parse(ArrayDetail.Quantity)).ToString();//库存数量=原有的库存数量+入库的数量
myModels.Entry(dbWarehouseStorage).State
= System.Data.Entity.EntityState.Modified;
myModels.SaveChanges();
}
注意:在修改库存量的时候不能直接相加,需要使用int.Parse将数字的字符串表示形式转换为它的等效32位有符号整数,然后再相加,在相加完成后需要再把它转换为string类型
再注意:在一个public ActionResult中进行多表增删查改,需要使用事务,使用事务在最后保存成功后还需要提交事务,否则数据是不会增删查改的
//使用事务----开启事务
using (var scope = new TransactionScope())
{
//====提交事务!!!!
scope.Complete();
}
使用事务的目的是为了防止数据冗余