Example #1
0
 /// <summary>
 /// 执行删除数据并处理相关数据一致性
 /// </summary>
 /// <param name="e">传入的带有数据的事件参数</param>
 /// <returns></returns>
 private bool DeleteData(FormViewDeleteEventArgs e)
 {
     //当前单号
     string billNum = Convert.ToString(e.Keys[0]);
     //数据适配器
     //当前数据库连接
     //当前更新语句对象
     using (var da = new v_complete_lot_card_backTableAdapter())
     using (var conn = da.Connection)
     {
         //打开数据库连接
         conn.Open();
         //开启事务
         using (var tran = conn.BeginTransaction())
         {
             //试运行
             try
             {
                 //设置事务
                 da.Transaction = tran;
                 //获取数据
                 var tab = da.GetDataByBillNum(billNum);
                 //检查是否获取到行
                 if (tab.Rows.Count == 0)
                 {
                     //显示失败
                     throw new Exception("当前记录已经被其他用户删除!");
                 }
                 //数据适配器
                 using (var daHead = new t_complete_lot_card_back_headTableAdapter())
                 using (var daContent = new t_complete_lot_card_back_contentTableAdapter())
                 using (var daBalance = new t_complete_lot_card_balanceTableAdapter())
                 {
                     //设置数据库连接
                     daHead.Connection = daContent.Connection = daBalance.Connection = conn;
                     //设置事务
                     daHead.Transaction = daContent.Transaction = daBalance.Transaction = tran;
                     //将之前的单据内容写回
                     foreach (DataSetCompleteBack.v_complete_lot_card_backRow row in tab.Rows)
                     {
                         //从成品结存清单中扣除
                         if (ydOperateCompleteLotCard.DecreaseCompleteBalance(
                             daBalance,
                             row.prev_proc_name,
                             row.lot_id,
                             row.pnl_qty,
                             row.pcs_qty
                         ))
                         {
                             return false;
                         }
                     }
                     //从单据内容中删除
                     daContent.DeleteByBillNum(billNum);
                     //从单据表头中删除
                     daHead.Delete(billNum);
                 }
                 //提交事务
                 tran.Commit();
                 //返回成功
                 return true;
             }
             catch (Exception ex)
             {
                 //回滚事务
                 tran.Rollback();
                 //非数字返回失败
                 throw new Exception(ex.Message);
             }
         }
     }
 }
Example #2
0
        /// <summary>
        /// 根据输入的参数值来执行更新数据
        /// </summary>
        /// <param name="e">传入的带有数据的事件参数</param>
        /// <returns></returns>
        private bool UpdateData(FormViewUpdateEventArgs 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 procName = e.OldValues["proc_name"].ToString();
                        //当前行单号
                        string billNum = Convert.ToString(e.Keys[0]);
                        //获取数据
                        using (var tab = da.GetDataByBillNum(billNum))
                        {
                            //检查是否获取到行
                            if (tab.Rows.Count == 0)
                            {
                                //显示失败
                                throw new Exception("当前记录已经被其他用户删除!");
                            }
                            //数据适配器
                            using (var daHead = new t_complete_lot_card_back_headTableAdapter())
                            using (var daContent = new t_complete_lot_card_back_contentTableAdapter())
                            using (var daBalance = new t_complete_lot_card_balanceTableAdapter())
                            {
                                //设置数据库连接
                                daHead.Connection = daContent.Connection = daBalance.Connection = conn;
                                //设置事务
                                daHead.Transaction = daContent.Transaction = daBalance.Transaction = tran;
                                //将之前的单据内容写回
                                foreach (DataSetCompleteBack.v_complete_lot_card_backRow row in tab.Rows)
                                {
                                    //从成品结存清单中扣除
                                    if (!ydOperateCompleteLotCard.DecreaseCompleteBalance(
                                        daBalance,
                                        row.prev_proc_name,
                                        row.lot_id,
                                        row.pnl_qty,
                                        row.pcs_qty
                                    ))
                                    {
                                        return false;
                                    }
                                }
                                //从单据内容中删除
                                daContent.DeleteByBillNum(billNum);
                                //从单据表头中删除
                                daHead.Delete(billNum);

                                //日期
                                DateTime billDate = Convert.ToDateTime(e.NewValues["bill_date"]);
                                //单据备注
                                string billRemark = Convert.ToString(e.NewValues["remark"]);
                                //录入员
                                string addPerson = e.NewValues["add_person"].ToString();
                                //录入时间
                                DateTime addTime = Convert.ToDateTime(e.NewValues["add_time"]);
                                //最后修改时间
                                DateTime lastChangeTime = Convert.ToDateTime(e.NewValues["last_change_time"]);
                                //保存表头
                                daHead.Insert(
                                    billDate,
                                    billNum,
                                    procName,
                                    billRemark,
                                    addPerson,
                                    addTime,
                                    lastChangeTime
                                );
                                //遍历子表执行保存
                                for (int iRow = 0; iRow < 10; iRow++)
                                {
                                    //子表各控件
                                    var tr = tabDataListSon.Rows[iRow + 1];
                                    var litRowId = (Literal)tr.Cells[0].Controls[0];
                                    var txtPrevProcName = (TextBox)tr.Cells[1].Controls[0];
                                    var txtLotId = (TextBox)tr.Cells[2].Controls[0];
                                    var txtProductNum = (TextBox)tr.Cells[3].Controls[0];
                                    var txtPnlQty = (TextBox)tr.Cells[4].Controls[0];
                                    var txtPcsQty = (TextBox)tr.Cells[5].Controls[0];
                                    var txtRemark = (TextBox)tr.Cells[6].Controls[0];
                                    //取得数据
                                    byte rowId = Convert.ToByte(litRowId.Text);
                                    string prevProcName = txtPrevProcName.Text;
                                    string lotId = txtLotId.Text;
                                    string productNum = txtProductNum.Text;
                                    int pnlQty = txtPnlQty.Text.Trim().Length <= 0 ? 0 : int.Parse(txtPnlQty.Text.Trim());
                                    int pcsQty = txtPcsQty.Text.Trim().Length <= 0 ? 0 : int.Parse(txtPcsQty.Text.Trim());
                                    string remark = txtRemark.Text;
                                    //存在数据才保存
                                    if (lotId.Length > 0 && productNum.Length > 0 && pnlQty + pcsQty > 0)
                                    {
                                        //保存到单据内容清单
                                        daContent.Insert(
                                            billNum,
                                            rowId,
                                            prevProcName,
                                            lotId,
                                            productNum,
                                            pnlQty,
                                            pcsQty,
                                            remark
                                        );
                                        //保存到成品结存清单
                                        daBalance.InsertData(
                                            prevProcName,
                                            procName,
                                            lotId,
                                            productNum,
                                            pnlQty,
                                            pcsQty,
                                            "成品盘亏单写回" + (remark.Length <= 0 ? string.Empty : ":" + remark),
                                            addPerson
                                        );
                                    }
                                }
                            }
                        }
                        //提交事务
                        tran.Commit();
                        //返回成功
                        return true;
                    }
                    catch (Exception ex)
                    {
                        //回滚事务
                        tran.Rollback();
                        //非数字返回失败
                        throw new Exception(ex.Message);
                    }
                }
            }
        }
Example #3
0
 /// <summary>
 /// 根据单号从数据库中删除单据的表头和内容
 /// </summary>
 /// <param name="billNum">单据号</param>
 private bool DeleteBillByBillNum(string billNum)
 {
     //实例化数据适配器
     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
             {
                 //取得之前盘盈单清单记录
                 var tab = da.GetDataByBillNum(billNum);
                 //检测是否存在数据
                 if (tab.Rows.Count > 0)
                 {
                     //单据表头行、内容行、成品结存和待盘盈数据适配器
                     using (var daHead = new t_complete_lot_card_back_headTableAdapter())
                     using (var daContent = new t_complete_lot_card_back_contentTableAdapter())
                     using (var daBalance = new t_complete_lot_card_balanceTableAdapter())
                     {
                         //设置连接对象
                         daHead.Connection = daContent.Connection = daBalance.Connection = tran.Connection;
                         //设置事务
                         daHead.Transaction = 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.DeleteByBillNum(billNum);
                         //根据盘盈单号删除全部盘盈表头记录
                         daHead.Delete(billNum);
                     }
                 }
                 //提交事务
                 tran.Commit();
                 //返回成功
                 return true;
             }
             catch (Exception ex)
             {
                 //回滚事务
                 tran.Rollback();
                 //抛出错误
                 throw new Exception("删除成品盘盈单记录出现错误:\n" + ex.Message);
             }
         }
     }
 }