Example #1
0
 /// <summary>
 /// 执行删除数据并处理相关数据一致性
 /// </summary>
 /// <param name="e">传入的带有数据的事件参数</param>
 /// <returns></returns>
 private bool DeleteData(ListViewDeleteEventArgs e)
 {
     //实例化数据适配器
     using (var da = new v_complete_lot_card_backTableAdapter())
     //取得数据库连接
     using (var conn = da.Connection)
     {
         //打开数据库连接
         conn.Open();
         //事务
         using (var tran = conn.BeginTransaction())
         {
             //设置事务
             da.Transaction = tran;
             try
             {
                 //当前盘盈单号
                 string billNum = e.Keys[0].ToString();
                 //当前行号
                 byte rowId = Convert.ToByte(e.Keys[1]);
                 //取得该条盘盈单清单记录
                 var tab = da.GetDataByBillNumAndRowId(billNum, rowId);
                 //检测是否存在数据
                 if (tab.Rows.Count <= 0)
                 {
                     throw new Exception(string.Format("当前单据:\n单号:{0}\n行号:{1}\n已经被其他用户删除!", billNum, rowId));
                 }
                 //单据内容、成品结存和待盘盈数据适配器
                 using (var daContent = new t_complete_lot_card_back_contentTableAdapter())
                 using (var daBalance = new t_complete_lot_card_balanceTableAdapter())
                 {
                     //设置连接对象
                     daContent.Connection = daBalance.Connection = tran.Connection;
                     //设置事务
                     daContent.Transaction = daBalance.Transaction = tran;
                     //遍历行执行删除各行的结存记录
                     foreach (DataSetCompleteBack.v_complete_lot_card_backRow row in tab.Rows)
                     {
                         //执行扣减结存
                         ydOperateCompleteLotCard.DecreaseCompleteBalance(
                             daBalance,
                             row.prev_proc_name,
                             row.lot_id,
                             row.pnl_qty,
                             row.pcs_qty
                         );
                     }
                     //根据盘盈单号和行号删除盘盈记录
                     daContent.Delete(billNum, rowId);
                     //检测当前盘盈记录内容行数
                     int? iCount = daContent.CountByBillNum(billNum);
                     if (iCount.HasValue && iCount.Value <= 0)
                     {
                         //表头适配器
                         using (var daHead = new t_complete_lot_card_back_headTableAdapter())
                         {
                             //删除表头
                             daHead.Delete(billNum);
                         }
                     }
                 }
                 //提交事务
                 tran.Commit();
                 //返回成功
                 return true;
             }
             catch (Exception ex)
             {
                 //回滚事务
                 tran.Rollback();
                 //抛出错误
                 throw new Exception("删除成品盘盈单记录出现错误:\n" + ex.Message);
             }
         }
     }
 }