⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 outputadapterlogic.cs

📁 很好呀!这是我们学校老师让做的学期末的课程设计
💻 CS
📖 第 1 页 / 共 2 页
字号:

                }
                else if (e.StatementType == StatementType.Delete)
                {
                    try
                    {
                        product_id = (string)e.Row["PRODUCT_ID", DataRowVersion.Original];
                        parentRow = e.Row.GetParentRow("FK_OUTPUTS_OUTPUT_DETAIL", DataRowVersion.Original) as HidaKitDataSet.OUTPUTSRow;
                        order_id = (string)parentRow["ORDER_ID", DataRowVersion.Original];

                        stockDetailTable = stockDetailAdapterForUpdate.GetDataByProductID(product_id);
                        DataRow[] rows = stockDetailTable.Select(
                                string.Format("STOCK_ID = '{0}'", e.Row["STOCK_ID", DataRowVersion.Original]));
                        if (rows == null || rows.Length == 0)
                            throw new OutOfStockException(product_id, (string)e.Row["PRODUCT_NAME", DataRowVersion.Original], (int)e.Row["QTY", DataRowVersion.Original], 0,
                                                              string.Format(Resources.Messages.SStockOut, product_id));
                        DataRow row2 = rows[0];
                        qty = row2["QTY"] == DBNull.Value ? 0 : Convert.ToInt32(row2["QTY"]);
                        qty += (int)e.Row["QTY", DataRowVersion.Original];
                        row2["QTY"] = qty;
                        stockDetailAdapterForUpdate.Update(stockDetailTable);
                    }
                    catch (Exception)
                    {
                        //always allow delete.
                    }
                }
            }
            finally
            {
                ConnectionHelper.ReleaseConnection(conn);
            }
        }

        void ProcessOrders(SqlRowUpdatingEventArgs e)
        {
            SqlConnection conn = ConnectionHelper.GetConnection();
            try
            {
                ORDERS_DETAILTableAdapter orderDetailAdapterForUpdate = HidaKitAdapterProxy.GetOrderDetailAdapter(Connection, false);
                PRODUCTSTableAdapter productAdapter = HidaKitAdapterProxy.GetProductAdapter(conn);
                OUTPUTSTableAdapter outputAdapter = HidaKitAdapterProxy.GetOutputAdapter(conn);
                HidaKitDataSet.ORDERS_DETAILDataTable orderDetailTable = null;
                HidaKitDataSet.OUTPUTSRow parentRow;
                string product_id, order_id;
                int qty;

                if (e.StatementType == StatementType.Insert || e.StatementType == StatementType.Update)
                {
                    if (Adapter.UpdateCommand.Transaction != null)
                        orderDetailAdapterForUpdate.InitTransaction(Adapter.UpdateCommand.Transaction);
                    product_id = (string)e.Row["PRODUCT_ID"];
                    parentRow = e.Row.GetParentRow("FK_OUTPUTS_OUTPUT_DETAIL") as HidaKitDataSet.OUTPUTSRow;
                    order_id = (string)parentRow["ORDER_ID"];
                    orderDetailTable = orderDetailAdapterForUpdate.GetQtyByOrderIdAndProductId(order_id, product_id);
                    //recover qty
                    if (e.StatementType == StatementType.Update)
                    {
                        qty = (int)e.Row["QTY", DataRowVersion.Original];
                        foreach (DataRow row in orderDetailTable.Rows)
                        {
                            int p = row["QTY"] == DBNull.Value ? 0 : Convert.ToInt32(row["QTY"]);
                            int p1 = row["OUT_QTY"] == DBNull.Value ? 0 : Convert.ToInt32(row["OUT_QTY"]);
                            if (p1 > 0)
                            {
                                if (p1 > qty)
                                {
                                    p1 -= qty;
                                    qty = 0;
                                }
                                else
                                {
                                    qty -= p1;
                                    p1 = 0;
                                }
                                row["OUT_QTY"] = p1;
                            }
                        }
                    }

                    qty = Convert.ToInt32(e.Row["QTY"]);
                    foreach (DataRow row in orderDetailTable.Rows)
                    {
                        int p = row["QTY"] == DBNull.Value ? 0 : Convert.ToInt32(row["QTY"]);
                        int p1 = row["OUT_QTY"] == DBNull.Value ? 0 : Convert.ToInt32(row["OUT_QTY"]);
                        if (p1 < p)
                        {
                            int s = p - p1;
                            if (s > qty)
                            {
                                p1 += qty;
                                qty = 0;
                            }
                            else
                            {
                                p1 = p;
                                qty -= s;
                            }
                            row["OUT_QTY"] = p1;
                        }
                    }

                    if (qty != 0)
                        throw new OutOfStockException(product_id, "", (int)e.Row["QTY"], -1,
                                                      string.Format(Resources.Messages.SStockOut, product_id));
                    orderDetailAdapterForUpdate.Update(orderDetailTable as HidaKitDataSet.ORDERS_DETAILDataTable);
                }
                else if (e.StatementType == StatementType.Delete)
                {
                    if (Adapter.UpdateCommand.Transaction != null)
                        orderDetailAdapterForUpdate.InitTransaction(Adapter.UpdateCommand.Transaction);

                    try
                    {
                        product_id = (string)e.Row["PRODUCT_ID", DataRowVersion.Original];
                        parentRow = e.Row.GetParentRow("FK_OUTPUTS_OUTPUT_DETAIL", DataRowVersion.Original) as HidaKitDataSet.OUTPUTSRow;
                        order_id = (string)parentRow["ORDER_ID", DataRowVersion.Original];

                        orderDetailTable = orderDetailAdapterForUpdate.GetQtyByOrderIdAndProductId(order_id, product_id);
                        //recover qty                   
                        qty = (int)e.Row["QTY", DataRowVersion.Original];
                        foreach (DataRow row in orderDetailTable.Rows)
                        {
                            int p = row["QTY"] == DBNull.Value ? 0 : Convert.ToInt32(row["QTY"]);
                            int p1 = row["OUT_QTY"] == DBNull.Value ? 0 : Convert.ToInt32(row["OUT_QTY"]);
                            if (p1 > 0)
                            {
                                if (p1 > qty)
                                {
                                    p1 -= qty;
                                    qty = 0;
                                }
                                else
                                {
                                    qty -= p1;
                                    p1 = 0;
                                }
                                row["OUT_QTY"] = p1;
                            }
                        }
                        orderDetailAdapterForUpdate.Update(orderDetailTable as HidaKitDataSet.ORDERS_DETAILDataTable);
                    }
                    catch (Exception)
                    {
                        //always allow delete.
                    }
                }
            }
            finally
            {
                ConnectionHelper.ReleaseConnection(conn);
            }
        }

        void Adapter_RowUpdating(object sender, SqlRowUpdatingEventArgs e)
        {
            //check required id.
            CheckRequired(e);

            //check stock qty
            CheckStock(e);

            //check qty/current_qty
            ProcessOrders(e);
        }
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -