/// <summary> /// 执行删除数据并处理相关数据一致性 /// </summary> /// <param name="e">传入的带有数据的事件参数</param> /// <returns></returns> private bool DeleteData(ListViewDeleteEventArgs e) { //当前用户输入的id号 Int64 id = Convert.ToInt64(e.Keys[0]); //数据适配器 //当前数据库连接 //当前更新语句对象 using (var da = new t_product_record_xianluTableAdapter()) using (var cmd = da.Adapter.DeleteCommand) using (var conn = cmd.Connection) { //打开数据库连接 conn.Open(); //开启事务 using (var tran = conn.BeginTransaction()) { //试运行 try { //设置事务 da.Transaction = tran; //获取数据 using (var tab = da.GetDataById(id)) { //检查是否获取到行 if (tab.Rows.Count == 0) { //显示失败 throw new Exception("当前生产记录已经被其他用户删除!"); } else { //首行 var row = (DataSetProductRecord.t_product_record_xianluRow)tab.Rows[0]; //下部门名称 string nextProcName = row.next_proc_name; //批量卡序号 string lotId = row.lot_id; //pnl出数 int pnlQty = row.pnl_qty; //pcs出数 int pcsQty = row.pcs_qty; //检测是否超过下部门余数 if (ydOperateBalanceLotCrad.IsOutstripProcBalance( tran, nextProcName, lotId, false, pnlQty, pcsQty )) { return false; } //修改下部门批量卡余数 if (!ydOperateBalanceLotCrad.UpdateBalanceAfterInsert( tran, nextProcName, lotId, false, pnlQty, pcsQty )) { return false; } //部门名称 string procName = row.proc_name; //目标数据库表名 string toTabName = "[t_proc_lot_card_balance]"; //添加到部门结存批量卡 if (!ydOperateBalanceLotCrad.InsertOneRecordToLotCardBalance( tran, ydOperateBalanceLotCrad.GetTabNameByProcName(procName), procName, toTabName, id, true )) { return false; } //从生产记录删除数据 if (!ydOperateBalanceLotCrad.DeleteOneRecordFromProductOrScrapRecord(cmd, id)) { return false; } } } //提交事务 tran.Commit(); //返回成功 return true; } catch (Exception ex) { //回滚事务 tran.Rollback(); //非数字返回失败 throw new Exception(ex.Message); } } } }
/// <summary> /// 根据输入的参数值来执行更新数据 /// </summary> /// <param name="e">传入的带有数据的事件参数</param> /// <returns></returns> private bool UpdateData(FormViewUpdateEventArgs e) { //检测是否更改了需要更新到其他部门的数据内容 if (e.OldValues["lot_id"].Equals(e.NewValues["lot_id"]) && e.OldValues["product_num"].Equals(e.NewValues["product_num"]) && e.OldValues["pnl_qty"].Equals(e.NewValues["pnl_qty"]) && e.OldValues["next_proc_name"].Equals(e.NewValues["next_proc_name"]) ) { //执行只更新本生产记录 e.Cancel = false; //更新事件继续执行 return false; } //数据适配器 //当前添加语句对象 //当前数据库连接 using (var da = new t_product_record_xianluTableAdapter()) using (var cmd = da.Adapter.UpdateCommand) using (var conn = cmd.Connection) { //打开数据库连接 conn.Open(); //开启事务 using (var tran = conn.BeginTransaction()) { //设置事务 da.Transaction = tran; //试运行 try { //部门名称 string procName = e.OldValues["proc_name"].ToString(); //当前行id号 Int64 id = Convert.ToInt64(e.Keys["id"]); //获取数据 using (var tab = da.GetDataById(id)) { //检查是否获取到行 if (tab.Rows.Count == 0) { //显示失败 throw new Exception("当前生产记录已经被其他用户删除!"); } else { //首行 var row = (DataSetProductRecord.t_product_record_xianluRow)tab.Rows[0]; //下部门名称 string nextProcName = row.next_proc_name; //批量卡序号 string lotId = row.lot_id; //pnl出数 int pnlQty = row.pnl_qty; //pcs出数 int pcsQty = row.pcs_qty; //检测是否超过下部门余数 if (ydOperateBalanceLotCrad.IsOutstripProcBalance( tran, nextProcName, lotId, false, pnlQty, pcsQty )) { return false; } //修改下部门批量卡余数 if (!ydOperateBalanceLotCrad.UpdateBalanceAfterInsert( tran, nextProcName, lotId, false, pnlQty, pcsQty )) { return false; } //目标数据库表名 string toTabName = "[t_proc_lot_card_balance]"; //添加到部门结存批量卡 if (!ydOperateBalanceLotCrad.InsertOneRecordToLotCardBalance( tran, ydOperateBalanceLotCrad.GetTabNameByProcName(procName), procName, toTabName, id, true )) { return false; } } } //部门名称 procName = e.NewValues["proc_name"].ToString(); //保存一条记录到数据库 if (!ydOperateBalanceLotCrad.UpdateOneRecord(cmd, e, procName)) { //失败就直接返回 return false; } //提交事务 tran.Commit(); //返回成功 return true; } catch (Exception ex) { //回滚事务 tran.Rollback(); //非数字返回失败 throw new Exception(ex.Message); } } } }