📄 outputadapterlogic.cs
字号:
}
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 + -