入库修改
入库修改界面见下图:
从【入库修改】界面可以看到控件有:
控件 | 说明 |
文本框(TextBox) | 编辑控件可以在工具箱直接拖动至窗体,拖至窗体后右击属性可以修改控件的样式和各种属性,还可以设置事件。 |
日期控件(DateTimePicKer) | |
表格(DataGridView) | |
下拉框(ComboBox) | |
按钮(Button) |
1、数据库功能实现
第一步:数据库
1、表和关系
表1、出入库表(PW_ComeInAndGoOutList)
列名 | 数据类型 | 主键/外键 | 说明 |
ComeInAndGoOutID | int - Identity | 主键 | 出入库ID |
ComeInAndGoOutOddNembers | nchar (20) |
| 出入库单号 |
ComeInAndGoOutGross | decimal (18, 2) |
| 出入库总数量 |
ComeInAndGoOutData | datetime |
| 出入库时间 |
DrawUp_StaffID | int | 外键 | 员工档案表,编制人_员工ID |
ExAminePerson_StaffID | int | 外键 | 员工档案表,审核人_员工ID |
IfComeIn | bit |
| 入库否 |
IfEffective | bit |
| 有效否 |
表2、出入库明细表(PW_ComeInAndGoOutMinuteList)
列名 | 数据类型 | 主键/外键 | 说明 |
ComeInAndGoOutMinuteID | int | 主键 | 出入库明细ID |
ComeInAndGoOutID | int | 外键 | 出入库表,出入库ID |
PartsID | int | 外键 | 配件表,配件ID |
StorageID | int | 外键 | 仓库表,仓库ID |
AtributeMinuteID_ComeInAndGoOutType | int | 外键 | 属性明细表,属性明细ID_出入库类型 |
ComeInAndGoOutQuantity | decimal (18, 2) |
| 出入库数量 |
ComeInAndGoOutPrice | decimal (18, 2) |
| 出入库单价 |
表3、库存表(BM_StockList)
列名 | 数据类型 | 主键/外键 | 说明 |
StockID | int - Identity | 主键 | 库存ID |
PartsID | int | 外键 | 配件表,配件ID |
StorageID | int | 外键 | 仓库表,仓库ID |
StockNumber | decimal (18, 2) |
| 库存数 |
表4、仓库表(BM_StorageList)
列名 | 数据类型 | 主键/外键 | 说明 |
StorageID | int - Identity | 主键 | 仓库ID |
StorageName | nchar (20) |
| 仓库名 |
Dimension | decimal (18, 2) |
| 容积 |
功能实现
1、修改窗体加载事件,绑定数据
第一步:数据库存储过程
IF(@TYPE='FRM_RuKuGuanLi_Update_Load_SelectComeIn')
BEGIN
SELECT ComeInAndGoOutOddNembers, ComeInAndGoOutGross, ComeInAndGoOutData,
DrawUp_StaffID AS DrawUpID, ExAminePerson_StaffID AS ExAminePersonID, ComeInAndGoOutID
FROM PW_ComeInAndGoOutList
WHERE PW_ComeInAndGoOutList.ComeInAndGoOutID=@ComeInAndGoOutID
END
IF(@TYPE='FRM_RuKuGuanLi_Update_Load_SelectComeInMinute')
BEGIN
SELECT PW_ComeInAndGoOutMinuteList.ComeInAndGoOutMinuteID, PW_ComeInAndGoOutMinuteList.PartsID, PW_ComeInAndGoOutMinuteList.StorageID,
PW_ComeInAndGoOutMinuteList.AtributeMinuteID_ComeInAndGoOutType AS ComeInAndGoOutTypeID, PW_ComeInAndGoOutMinuteList.ComeInAndGoOutQuantity,
PW_ComeInAndGoOutMinuteList.ComeInAndGoOutPrice, AttributeMinuteList.AttributeMinuteID, BM_PartsList.PartsCoding, BM_PartsList.PartsName, BM_PartsList.Specification,
BM_PartsList.AttributeMinuteID_Unit AS UnitID, AttributeMinuteList_1.AttributeMinuteName AS Unit, AttributeMinuteList.AttributeMinuteName AS ComeInAndGoOutType,
BM_StorageList.StorageName
FROM AttributeMinuteList INNER JOIN
PW_ComeInAndGoOutMinuteList INNER JOIN
BM_StorageList ON PW_ComeInAndGoOutMinuteList.StorageID = BM_StorageList.StorageID INNER JOIN
BM_PartsList ON PW_ComeInAndGoOutMinuteList.PartsID = BM_PartsList.PartsID ON
AttributeMinuteList.AttributeMinuteID = PW_ComeInAndGoOutMinuteList.AtributeMinuteID_ComeInAndGoOutType INNER JOIN
AttributeMinuteList AS AttributeMinuteList_1 ON BM_PartsList.AttributeMinuteID_Unit = AttributeMinuteList_1.AttributeMinuteID
WHERE PW_ComeInAndGoOutMinuteList.ComeInAndGoOutID=@ComeInAndGoOutID
END
IF(@TYPE='FRM_RuKuGuanLi_Update_btnSave_Click_DeleteComeInMinute')
BEGIN
DELETE PW_ComeInAndGoOutMinuteList
WHERE PW_ComeInAndGoOutMinuteList.ComeInAndGoOutID=@ComeInAndGoOutID
END
第二步:逻辑层(BLL)
//查询入库信息
[OperationContract]
public DataSet FRM_RuKuGuanLi_Update_Load_SelectComeIn(int intComeInAndGoOutID)
{
SqlParameter[] mySqlParameters =
{
new SqlParameter("@TYPE",SqlDbType.NChar),
new SqlParameter("@ComeInAndGoOutID",SqlDbType.Int),
};
mySqlParameters[0].Value = "FRM_RuKuGuanLi_Update_Load_SelectComeIn";
mySqlParameters[1].Value = intComeInAndGoOutID;
DataTable dt = myDALMethod.QueryDataTable("库存管理_FRM_RuKuGuanLi_Update", mySqlParameters);
DataSet ds = new DataSet();
ds.Tables.Add(dt);
return ds;
}
//查询入库明细信息
[OperationContract]
public DataSet FRM_RuKuGuanLi_Update_Load_SelectComeInMinute(int intComeInAndGoOutID)
{
SqlParameter[] mySqlParameters =
{
new SqlParameter("@TYPE",SqlDbType.NChar),
new SqlParameter("@ComeInAndGoOutID",SqlDbType.Int),
};
mySqlParameters[0].Value = "FRM_RuKuGuanLi_Update_Load_SelectComeInMinute";
mySqlParameters[1].Value = intComeInAndGoOutID;
DataTable dt = myDALMethod.QueryDataTable("库存管理_FRM_RuKuGuanLi_Update", mySqlParameters);
DataSet ds = new DataSet();
ds.Tables.Add(dt);
return ds;
}
//删除入库明细信息
[OperationContract]
public int FRM_RuKuGuanLi_Update_btnSave_Click_DeleteComeInMinute(int intComeInAndGoOutID)
{
SqlParameter[] mySqlParameters =
{
new SqlParameter("@TYPE",SqlDbType.NChar),
new SqlParameter("@ComeInAndGoOutID",SqlDbType.Int),
};
mySqlParameters[0].Value = "FRM_RuKuGuanLi_Update_btnSave_Click_DeleteComeInMinute";
mySqlParameters[1].Value = intComeInAndGoOutID;
return myDALMethod.UpdateData("库存管理_FRM_RuKuGuanLi_Update", mySqlParameters);
}
第三步:界面层(UIL)
//根据入库单ID,查询入库信息
DataTable dtComeIn = myFRM_RuKuGuanLi_UpdateClient.FRM_RuKuGuanLi_Update_Load_SelectComeIn(FRM_RuKuGuanLi.intComeInAndGoOutID).Tables[0];
//绑定数据
txtComeInOddNember.Text = dtComeIn.Rows[0]["ComeInAndGoOutOddNembers"].ToString();
cboDrawUp.SelectedValue = Convert.ToInt32(dtComeIn.Rows[0]["DrawUpID"].ToString());
cboExAminePerson.SelectedValue = Convert.ToInt32(dtComeIn.Rows[0]["ExAminePersonID"].ToString());
dtpComeInData.Value = Convert.ToDateTime(dtComeIn.Rows[0]["ComeInAndGoOutData"]);
txtGross.Text = dtComeIn.Rows[0]["ComeInAndGoOutGross"].ToString();
//根据入库单ID,查询入库明细信息
dtComeInMinute = myFRM_RuKuGuanLi_UpdateClient.FRM_RuKuGuanLi_Update_Load_SelectComeInMinute(FRM_RuKuGuanLi.intComeInAndGoOutID).Tables[0];
for(int i=0;i<dtComeInMinute.Rows.Count ;i++)//循环遍历表
{
//把数据绑定到dgv上
dgvComeInMinute.Rows.Add();
dgvComeInMinute.Rows[dgvComeInMinute.Rows.Count - 1].Cells["配件ID"].Value = dtComeInMinute.Rows[i]["PartsID"].ToString();
dgvComeInMinute.Rows[dgvComeInMinute.Rows.Count - 1].Cells["配件名称"].Value = dtComeInMinute.Rows[i]["PartsName"].ToString();
dgvComeInMinute.Rows[dgvComeInMinute.Rows.Count - 1].Cells["配件代码"].Value = dtComeInMinute.Rows[i]["PartsCoding"].ToString();
dgvComeInMinute.Rows[dgvComeInMinute.Rows.Count - 1].Cells["入库类型ID"].Value = dtComeInMinute.Rows[i]["ComeInAndGoOutTypeID"].ToString();
dgvComeInMinute.Rows[dgvComeInMinute.Rows.Count - 1].Cells["入库类型1"].Value = dtComeInMinute.Rows[i]["ComeInAndGoOutType"].ToString();
dgvComeInMinute.Rows[dgvComeInMinute.Rows.Count - 1].Cells["单位"].Value = dtComeInMinute.Rows[i]["Unit"].ToString();
dgvComeInMinute.Rows[dgvComeInMinute.Rows.Count - 1].Cells["规格"].Value = dtComeInMinute.Rows[i]["Specification"].ToString();
dgvComeInMinute.Rows[dgvComeInMinute.Rows.Count - 1].Cells["仓库ID"].Value = dtComeInMinute.Rows[i]["StorageID"].ToString();
dgvComeInMinute.Rows[dgvComeInMinute.Rows.Count - 1].Cells["仓库名称"].Value = dtComeInMinute.Rows[i]["StorageName"].ToString();
dgvComeInMinute.Rows[dgvComeInMinute.Rows.Count - 1].Cells["入库单价"].Value = dtComeInMinute.Rows[i]["ComeInAndGoOutPrice"].ToString();
dgvComeInMinute.Rows[dgvComeInMinute.Rows.Count - 1].Cells["入库数量"].Value = dtComeInMinute.Rows[i]["ComeInAndGoOutQuantity"].ToString();
dgvComeInMinute.Rows[dgvComeInMinute.Rows.Count - 1].Cells["入库金额"].Value = Convert.ToDecimal(dtComeInMinute.Rows[i]["ComeInAndGoOutPrice"].ToString()) * Convert.ToDecimal(dtComeInMinute.Rows[i]["ComeInAndGoOutQuantity"].ToString());
}
decimal decJinE=0;
for (int j = 0; j < dgvComeInMinute.Rows.Count; j++)//循环dgv
{
//计算总金额
decJinE +=Convert.ToDecimal(dgvComeInMinute.Rows[j].Cells["入库金额"].Value);
}
txtAmount.Text = decJinE.ToString();
//根据原入库单ID查询该单据明细信息
//DataTable dtComeInMinute = myFRM_RuKuGuanLi_UpdateClient.FRM_RuKuGuanLi_Update_Load_SelectComeInMinute(FRM_RuKuGuanLi.intComeInAndGoOutID).Tables[0];
for (int i = 0; i < dtComeInMinute.Rows.Count; i++)//循环表
{
DataTable dtKunCun = myFRM_RuKuGuanLi_InsertClient.FRM_RuKuGuanLi_Insert_SelectKuCun(Convert.ToInt32(dtComeInMinute.Rows[i]["PartsID"]), Convert.ToInt32(dtComeInMinute.Rows[i]["StorageID"])).Tables[0];
if (dtKunCun.Rows.Count > 0)
{
//修改库存数,把原来的空间释放出来
decimal decKuCunShu = Convert.ToDecimal(dtKunCun.Rows[0]["StockNumber"]) - Convert.ToDecimal(dtComeInMinute.Rows[i]["ComeInAndGoOutQuantity"]);
int intUpdate = myFRM_RuKuGuanLi_InsertClient.FRM_RuKuGuanLi_Insert_btnInsert_ClickUpdateStockNumber(decKuCunShu, Convert.ToInt32(dtKunCun.Rows[0]["StockID"]));
}
}
//删除原来的明细信息
int intDelete = myFRM_RuKuGuanLi_UpdateClient.FRM_RuKuGuanLi_Update_btnSave_Click_DeleteComeInMinute(FRM_RuKuGuanLi.intComeInAndGoOutID);
2、查询库存容量—【修改】按钮点击事件
第一步:数据库存储过程
IF(@TYPE='FRM_RuKuGuanLi_Insert_SelectCangKuRoLiang')
BEGIN
SELECT Dimension, StorageID
FROM BM_StorageList
WHERE BM_StorageList.StorageID=@StorageID
END
IF(@TYPE='FRM_RuKuGuanLi_Insert_SelectCangkuYiYongRoLiang')
BEGIN
SELECT BM_StockList.PartsID, BM_StockList.StockNumber, BM_PartsList.Specification
FROM BM_StockList INNER JOIN
BM_PartsList ON BM_StockList.PartsID = BM_PartsList.PartsID
WHERE BM_StockList.StorageID=@StorageID
END
第二步:逻辑层(BLL)
//查询库存容量
[OperationContract]
public DataSet FRM_RuKuGuanLi_Insert_SelectCangKuRoLiang(int intStorageID)
{
SqlParameter[] mySqlParameters =
{
new SqlParameter("@TYPE",SqlDbType.NChar),
new SqlParameter("@StorageID",SqlDbType.Int),
};
mySqlParameters[0].Value = "FRM_RuKuGuanLi_Insert_SelectCangKuRoLiang";
mySqlParameters[1].Value = intStorageID;
DataTable dt = myDALMethod.QueryDataTable("库存管理_FRM_RuKuGuanLi_Insert", mySqlParameters);
DataSet ds = new DataSet();
ds.Tables.Add(dt);
return ds;
}
[OperationContract]
//查询已用容量
public DataSet FRM_RuKuGuanLi_Insert_SelectCangkuYiYongRoLiang(int intStorageID)
{
SqlParameter[] mySqlParameters =
{
new SqlParameter("@TYPE",SqlDbType.NChar),
new SqlParameter("@StorageID",SqlDbType.Int),
};
mySqlParameters[0].Value = "FRM_RuKuGuanLi_Insert_SelectCangkuYiYongRoLiang";
mySqlParameters[1].Value = intStorageID;
DataTable dt = myDALMethod.QueryDataTable("库存管理_FRM_RuKuGuanLi_Insert", mySqlParameters);
DataSet ds = new DataSet();
ds.Tables.Add(dt);
return ds;
}
第三步:界面层(UIL)
BLL海马汽车销售系统.库存管理.FRM_RuKuGuanLi_Insert.FRM_RuKuGuanLi_InsertClient myFRM_RuKuGuanLi_InsertClient =
new BLL海马汽车销售系统.库存管理.FRM_RuKuGuanLi_Insert.FRM_RuKuGuanLi_InsertClient();
private void btnUpdate_Click(object sender, EventArgs e)
{
if (txtPrice.Text == "")//入库单价为空
{
MessageBox.Show("入库单价不能为空!");
return;
}
if (txtQuantity.Text == "")//入库数量为空
{
MessageBox.Show("入库数量不能为空!");
return;
}
//根据仓库ID查询仓库容积
DataTable dtKuCun = myFRM_RuKuGuanLi_InsertClient.FRM_RuKuGuanLi_Insert_SelectCangKuRoLiang(Convert.ToInt32(cboStorageName.SelectedValue)).Tables[0];
decimal decKuCun = Convert.ToDecimal(dtKuCun.Rows[0]["Dimension"]);
//根据仓库ID查询该仓库的货品和货品数量
DataTable dtYiYongRoLiang = myFRM_RuKuGuanLi_InsertClient.FRM_RuKuGuanLi_Insert_SelectCangkuYiYongRoLiang(Convert.ToInt32(cboStorageName.SelectedValue)).Tables[0];
decimal decYiYongRoLiang = 0;
for (int j = 0; j < dtYiYongRoLiang.Rows.Count; j++)//循环表
{
//计算该仓库已用容积
decYiYongRoLiang += Convert.ToDecimal(dtYiYongRoLiang.Rows[j]["StockNumber"]) * Convert.ToDecimal(dtYiYongRoLiang.Rows[j]["Specification"]);
}
decimal decKeYongRoLiang = decKuCun - decYiYongRoLiang; ;//计算可用容积
if (dgvComeInMinute.Rows.Count > 0)
{
for (int k = 0; k < dgvComeInMinute.Rows.Count; k++)
{
//入库仓库与dgv上第k行上的仓库相同
if (Convert.ToInt32(cboStorageName.SelectedValue) == Convert.ToInt32(dgvComeInMinute.Rows[k].Cells["仓库ID"].Value))
{
//计算可用容积
decKeYongRoLiang = decKeYongRoLiang - Convert.ToDecimal(dgvComeInMinute.Rows[k].Cells["入库数量"].Value) * Convert.ToDecimal(dgvComeInMinute.Rows[k].Cells["规格"].Value);
}
}
}
//如果控件中的配件、仓库、入库类型与所选修改行的配件、仓库、入库类型相同
if (Convert.ToInt32(cboStorageName.SelectedValue) == Convert.ToInt32(dgvComeInMinute.CurrentRow.Cells["仓库ID"].Value)
&& Convert.ToInt32(cboPartsName.SelectedValue) == Convert.ToInt32(dgvComeInMinute.CurrentRow.Cells["配件ID"].Value)
&& Convert.ToInt32(cboComeInType.SelectedValue) == Convert.ToInt32(dgvComeInMinute.CurrentRow.Cells["入库类型ID"].Value))
{ }
else
{
if (dgvComeInMinute.Rows.Count > 0)
{
for (int i = 0; i < dgvComeInMinute.Rows.Count; i++)
{
//如果dgv中已存在相同的配件以相同的入库方式进入相同仓库的单据
if (Convert.ToInt32(cboPartsName.SelectedValue) == Convert.ToInt32(dgvComeInMinute.Rows[i].Cells["配件ID"].Value)
&& Convert.ToInt32(cboStorageName.SelectedValue) == Convert.ToInt32(dgvComeInMinute.Rows[i].Cells["仓库ID"].Value)
&& Convert.ToInt32(cboComeInType.SelectedValue) == Convert.ToInt32(dgvComeInMinute.Rows[i].Cells["入库类型ID"].Value))
{
MessageBox.Show("该配件以该种类型进入该目标仓库的单据已存在");
return;
}
}
}
}
if (decKeYongRoLiang > Convert.ToDecimal(txtGuiGe.Text) * Convert.ToDecimal(txtQuantity.Text))//如果容量足够
{
//把控件上的信息添加到dgv
dgvComeInMinute.CurrentRow.Cells["配件ID"].Value = Convert.ToInt32(cboPartsName.SelectedValue);
dgvComeInMinute.CurrentRow.Cells["配件名称"].Value = cboPartsName.Text;
dgvComeInMinute.CurrentRow.Cells["配件代码"].Value = txtPartsCode.Text;
dgvComeInMinute.CurrentRow.Cells["单位"].Value = txtUnit.Text;
dgvComeInMinute.CurrentRow.Cells["规格"].Value = txtGuiGe.Text;
dgvComeInMinute.CurrentRow.Cells["入库类型ID"].Value = Convert.ToInt32(cboComeInType.SelectedValue);
dgvComeInMinute.CurrentRow.Cells["入库类型1"].Value = cboComeInType.Text;
dgvComeInMinute.CurrentRow.Cells["仓库名称"].Value = cboStorageName.Text;
dgvComeInMinute.CurrentRow.Cells["仓库ID"].Value = Convert.ToInt32(cboStorageName.SelectedValue);
dgvComeInMinute.CurrentRow.Cells["入库单价"].Value = txtPrice.Text;
dgvComeInMinute.CurrentRow.Cells["入库数量"].Value = txtQuantity.Text;
dgvComeInMinute.CurrentRow.Cells["入库金额"].Value = txtMoney.Text;
}
else
{
MessageBox.Show("该仓库剩余空间不足!");
}
HeJi();
}
public void HeJi()
{
decimal decZongJiE = 0;
decimal decZongLiang = 0;
if (dgvComeIn.Rows.Count > 0)//如果dgv不为空
{
for (int i = 0; i < dgvComeIn.Rows.Count; i++)//循环dgv
{
//合计入库金额与入库总量
decZongJiE += Convert.ToDecimal(dgvComeIn.Rows[i].Cells["入库金额"].Value);
decZongLiang += Convert.ToDecimal(dgvComeIn.Rows[i].Cells["入库数量"].Value);
}
}
//赋值给【入库金额】与【入库数量】
txtGross.Text = decZongLiang.ToString().Trim();
txtAmount.Text = decZongJiE.ToString().Trim();
}
3、【增加】按钮点击事件
第一步:数据库存储过程
IF(@TYPE='FRM_RuKuGuanLi_Insert_SelectCangKuRoLiang')
BEGIN
SELECT Dimension, StorageID
FROM BM_StorageList
WHERE BM_StorageList.StorageID=@StorageID
END
IF(@TYPE='FRM_RuKuGuanLi_Insert_SelectCangkuYiYongRoLiang')
BEGIN
SELECT BM_StockList.PartsID, BM_StockList.StockNumber, BM_PartsList.Specification
FROM BM_StockList INNER JOIN
BM_PartsList ON BM_StockList.PartsID = BM_PartsList.PartsID
WHERE BM_StockList.StorageID=@StorageID
END
第二步:逻辑层(BLL)
//查询仓库容量
[OperationContract]
public DataSet FRM_RuKuGuanLi_Insert_SelectCangKuRoLiang(int intStorageID)
{
SqlParameter[] mySqlParameters =
{
new SqlParameter("@TYPE",SqlDbType.NChar),
new SqlParameter("@StorageID",SqlDbType.Int),
};
mySqlParameters[0].Value = "FRM_RuKuGuanLi_Insert_SelectCangKuRoLiang";
mySqlParameters[1].Value = intStorageID;
DataTable dt = myDALMethod.QueryDataTable("库存管理_FRM_RuKuGuanLi_Insert", mySqlParameters);
DataSet ds = new DataSet();
ds.Tables.Add(dt);
return ds;
}
[OperationContract]
//查询仓库已用容量
public DataSet FRM_RuKuGuanLi_Insert_SelectCangkuYiYongRoLiang(int intStorageID)
{
SqlParameter[] mySqlParameters =
{
new SqlParameter("@TYPE",SqlDbType.NChar),
new SqlParameter("@StorageID",SqlDbType.Int),
};
mySqlParameters[0].Value = "FRM_RuKuGuanLi_Insert_SelectCangkuYiYongRoLiang";
mySqlParameters[1].Value = intStorageID;
DataTable dt = myDALMethod.QueryDataTable("库存管理_FRM_RuKuGuanLi_Insert", mySqlParameters);
DataSet ds = new DataSet();
ds.Tables.Add(dt);
return ds;
}
第三步:界面层(UIL)
BLL海马汽车销售系统.库存管理.FRM_RuKuGuanLi_Update.FRM_RuKuGuanLi_UpdateClient myFRM_RuKuGuanLi_UpdateClient =
new BLL海马汽车销售系统.库存管理.FRM_RuKuGuanLi_Update.FRM_RuKuGuanLi_UpdateClient();
BLL海马汽车销售系统.库存管理.FRM_RuKuGuanLi_Insert.FRM_RuKuGuanLi_InsertClient myFRM_RuKuGuanLi_InsertClient =
new BLL海马汽车销售系统.库存管理.FRM_RuKuGuanLi_Insert.FRM_RuKuGuanLi_InsertClient();
private void btnInsert_Click(object sender, EventArgs e)
{
if (dgvComeIn.Rows.Count > 0)//dgv不为空
{
for (int i = 0; i < dgvComeIn.Rows.Count; i++)//循环dgv
{
//如果dgv中相同的配件进入相同仓库的单据
if (Convert.ToInt32(cboPartsName.SelectedValue) == Convert.ToInt32(dgvComeIn.Rows[i].Cells["配件ID"].Value)
&& Convert.ToInt32(cboStorageName.SelectedValue) == Convert.ToInt32(dgvComeIn.Rows[i].Cells["仓库ID"].Value))
{
MessageBox.Show("该配件进入该目标仓库的单据已存在");
return;
}
}
}
if (txtPrice.Text == "")//如果入库单价为空
{
MessageBox.Show("入库单价不能为空!");
return;
}
if (txtQuantity.Text == "")//如果入库数量为空
{
MessageBox.Show("入库数量不能为空!");
return;
}
//根据仓库ID查询该仓库的容量
DataTable dtKuCun = myFRM_RuKuGuanLi_InsertClient.FRM_RuKuGuanLi_Insert_SelectCangKuRoLiang(Convert.ToInt32(cboStorageName.SelectedValue)).Tables[0];
decimal decKuCun = Convert.ToDecimal(dtKuCun.Rows[0]["Dimension"]);
//根据仓库ID查询该仓库的货品和货品数量
DataTable dtYiYongRoLiang = myFRM_RuKuGuanLi_InsertClient.FRM_RuKuGuanLi_Insert_SelectCangkuYiYongRoLiang(Convert.ToInt32(cboStorageName.SelectedValue)).Tables[0];
decimal decYiYongRoLiang=0;
for (int j = 0; j < dtYiYongRoLiang.Rows.Count; j++)//循环表
{
//计算已用容积
decYiYongRoLiang += Convert.ToDecimal(dtYiYongRoLiang.Rows[j]["StockNumber"]) * Convert.ToDecimal(dtYiYongRoLiang.Rows[j]["Specification"]);
}
decimal decKeYongRoLiang = decKuCun - decYiYongRoLiang;//计算可用容积
if (dgvComeIn.Rows.Count > 0)
{
for (int k = 0; k < dgvComeIn.Rows.Count; k++)//循环dgv
{
//入库仓库与dgv上第k行上的仓库相同
if (Convert.ToInt32(cboStorageName.SelectedValue) == Convert.ToInt32(dgvComeInMinute.Rows[k].Cells["仓库ID"].Value))
{
//计算可用容积
decKeYongRoLiang = decKeYongRoLiang - Convert.ToDecimal(dgvComeInMinute.Rows[k].Cells["入库数量"].Value) * Convert.ToDecimal(dgvComeInMinute.Rows[k].Cells["规格"].Value);
}
}
}
if (decKeYongRoLiang > Convert.ToDecimal(txtGuiGe.Text) * Convert.ToDecimal(txtQuantity.Text))//如果没超过可用容积
{
//dgv增加一行
dgvComeIn.Rows.Add();
//把控件上的信息添加到dgv
dgvComeIn.Rows[dgvComeIn.Rows.Count - 1].Cells["配件ID"].Value = Convert.ToInt32(cboPartsName.SelectedValue);
dgvComeIn.Rows[dgvComeIn.Rows.Count - 1].Cells["配件名称"].Value = cboPartsName.Text;
dgvComeIn.Rows[dgvComeIn.Rows.Count - 1].Cells["配件代码"].Value = txtPartsCode.Text;
dgvComeIn.Rows[dgvComeIn.Rows.Count - 1].Cells["单位"].Value = txtUnit.Text;
dgvComeIn.Rows[dgvComeIn.Rows.Count - 1].Cells["规格"].Value = txtGuiGe.Text;
dgvComeIn.Rows[dgvComeIn.Rows.Count - 1].Cells["入库类型ID"].Value = Convert.ToInt32(cboComeInType.SelectedValue);
dgvComeIn.Rows[dgvComeIn.Rows.Count - 1].Cells["入库类型1"].Value = cboComeInType.Text;
dgvComeIn.Rows[dgvComeIn.Rows.Count - 1].Cells["仓库名称"].Value = cboStorageName.Text;
dgvComeIn.Rows[dgvComeIn.Rows.Count - 1].Cells["仓库ID"].Value = Convert.ToInt32(cboStorageName.SelectedValue);
dgvComeIn.Rows[dgvComeIn.Rows.Count - 1].Cells["入库单价"].Value = txtPrice.Text;
dgvComeIn.Rows[dgvComeIn.Rows.Count - 1].Cells["入库数量"].Value = txtQuantity.Text;
dgvComeIn.Rows[dgvComeIn.Rows.Count - 1].Cells["入库金额"].Value = txtMoney.Text;
}
else
{
MessageBox.Show("该仓库剩余空间不足!");
}
HeJi();//调用自定义方法
}
public void HeJi()
{
decimal decZongJiE = 0;
decimal decZongLiang = 0;
if (dgvComeIn.Rows.Count > 0)//如果dgv不为空
{
for (int i = 0; i < dgvComeIn.Rows.Count; i++)//循环dgv
{
//合计入库金额与入库总量
decZongJiE += Convert.ToDecimal(dgvComeIn.Rows[i].Cells["入库金额"].Value);
decZongLiang += Convert.ToDecimal(dgvComeIn.Rows[i].Cells["入库数量"].Value);
}
}
//赋值给【入库金额】与【入库数量】
txtGross.Text = decZongLiang.ToString().Trim();
txtAmount.Text = decZongJiE.ToString().Trim();
}
3、保存。与新增保存有一点点的不同。
第一步:数据库存储过程
IF(@TYPE='FRM_RuKuGuanLi_Update_Load_SelectComeInMinute')
BEGIN
SELECT PW_ComeInAndGoOutMinuteList.ComeInAndGoOutMinuteID, PW_ComeInAndGoOutMinuteList.PartsID, PW_ComeInAndGoOutMinuteList.StorageID,
PW_ComeInAndGoOutMinuteList.AtributeMinuteID_ComeInAndGoOutType AS ComeInAndGoOutTypeID, PW_ComeInAndGoOutMinuteList.ComeInAndGoOutQuantity,
PW_ComeInAndGoOutMinuteList.ComeInAndGoOutPrice, AttributeMinuteList.AttributeMinuteID, BM_PartsList.PartsCoding, BM_PartsList.PartsName, BM_PartsList.Specification,
BM_PartsList.AttributeMinuteID_Unit AS UnitID, AttributeMinuteList_1.AttributeMinuteName AS Unit, AttributeMinuteList.AttributeMinuteName AS ComeInAndGoOutType,
BM_StorageList.StorageName
FROM AttributeMinuteList INNER JOIN
PW_ComeInAndGoOutMinuteList INNER JOIN
BM_StorageList ON PW_ComeInAndGoOutMinuteList.StorageID = BM_StorageList.StorageID INNER JOIN
BM_PartsList ON PW_ComeInAndGoOutMinuteList.PartsID = BM_PartsList.PartsID ON
AttributeMinuteList.AttributeMinuteID = PW_ComeInAndGoOutMinuteList.AtributeMinuteID_ComeInAndGoOutType INNER JOIN
AttributeMinuteList AS AttributeMinuteList_1 ON BM_PartsList.AttributeMinuteID_Unit = AttributeMinuteList_1.AttributeMinuteID
WHERE PW_ComeInAndGoOutMinuteList.ComeInAndGoOutID=@ComeInAndGoOutID
END
IF(@TYPE='FRM_RuKuGuanLi_Update_btnSave_Click_UpdateComeIn')
BEGIN
UPDATE PW_ComeInAndGoOutList
SET ComeInAndGoOutGross=@ComeInAndGoOutGross, ComeInAndGoOutData=@ComeInAndGoOutData,
DrawUp_StaffID=@DrawUp_StaffID, ExAminePerson_StaffID=@ExAminePerson_StaffID
WHERE PW_ComeInAndGoOutList.ComeInAndGoOutID=@ComeInAndGoOutID
END
IF(@TYPE='FRM_RuKuGuanLi_Update_btnSave_Click_DeleteComeInMinute')
BEGIN
DELETE PW_ComeInAndGoOutMinuteList
WHERE PW_ComeInAndGoOutMinuteList.ComeInAndGoOutID=@ComeInAndGoOutID
END
IF(@TYPE='FRM_RuKuGuanLi_Update_btnSave_Click_DeleteComeInMinute')
BEGIN
DELETE PW_ComeInAndGoOutMinuteList
WHERE PW_ComeInAndGoOutMinuteList.ComeInAndGoOutID=@ComeInAndGoOutID
END
第二步:逻辑层(BLL)
//查询入库单明细信息
[OperationContract]
public DataSet FRM_RuKuGuanLi_Update_Load_SelectComeInMinute(int intComeInAndGoOutID)
{
SqlParameter[] mySqlParameters =
{
new SqlParameter("@TYPE",SqlDbType.NChar),
new SqlParameter("@ComeInAndGoOutID",SqlDbType.Int),
};
mySqlParameters[0].Value = "FRM_RuKuGuanLi_Update_Load_SelectComeInMinute";
mySqlParameters[1].Value = intComeInAndGoOutID;
DataTable dt = myDALMethod.QueryDataTable("库存管理_FRM_RuKuGuanLi_Update", mySqlParameters);
DataSet ds = new DataSet();
ds.Tables.Add(dt);
return ds;
}
//保存修改后的入库信息
[OperationContract]
public int FRM_RuKuGuanLi_Update_btnSave_Click_UpdateComeIn(decimal decComeInAndGoOutGross, DateTime dtmComeInAndGoOutData, int intDrawUp,
int intExAminePerson, int intComeInAndGoOutID)
{
SqlParameter[] mySqlParameters =
{
new SqlParameter("@TYPE",SqlDbType.NChar),
new SqlParameter("@ComeInAndGoOutGross",SqlDbType.Decimal),
new SqlParameter("@ComeInAndGoOutData",SqlDbType.DateTime),
new SqlParameter("@DrawUp_StaffID",SqlDbType.Int),
new SqlParameter("@ExAminePerson_StaffID",SqlDbType.Int),
new SqlParameter("@ComeInAndGoOutID",SqlDbType.Bit),
};
mySqlParameters[0].Value = "FRM_RuKuGuanLi_Update_btnSave_Click_UpdateComeIn";
mySqlParameters[1].Value = decComeInAndGoOutGross;
mySqlParameters[2].Value = dtmComeInAndGoOutData;
mySqlParameters[3].Value = intDrawUp;
mySqlParameters[4].Value = intExAminePerson;
mySqlParameters[5].Value = intComeInAndGoOutID;
return myDALMethod.UpdateData("库存管理_FRM_RuKuGuanLi_Update", mySqlParameters);
}
第三步:界面层(UIL)
BLL海马汽车销售系统.库存管理.FRM_RuKuGuanLi_Update.FRM_RuKuGuanLi_UpdateClient myFRM_RuKuGuanLi_UpdateClient =
new BLL海马汽车销售系统.库存管理.FRM_RuKuGuanLi_Update.FRM_RuKuGuanLi_UpdateClient();
BLL海马汽车销售系统.库存管理.FRM_RuKuGuanLi_Insert.FRM_RuKuGuanLi_InsertClient myFRM_RuKuGuanLi_InsertClient =
new BLL海马汽车销售系统.库存管理.FRM_RuKuGuanLi_Insert.FRM_RuKuGuanLi_InsertClient();
int intNember = 0;//变量
DataTable dtComeInMinute;//定义表
private void btnSave_Click(object sender, EventArgs e)
{
//给参数赋值
int InsertComeInAndGoOutMinute = 0;
decimal decComeInAndGoOutGross =Convert.ToDecimal(txtGross.Text);
DateTime dtmComeInAndGoOutData = Convert.ToDateTime(dtpComeInData.Value);
int intDrawUp = Convert.ToInt32(cboDrawUp.SelectedValue);
int intExAminePerson = Convert.ToInt32(cboExAminePerson.SelectedValue);
int intComeInAndGoOutID = FRM_RuKuGuanLi.intComeInAndGoOutID;
//把入库信息保存到数据库
int intUpdateComeIn = myFRM_RuKuGuanLi_UpdateClient.FRM_RuKuGuanLi_Update_btnSave_Click_UpdateComeIn(decComeInAndGoOutGross, dtmComeInAndGoOutData, intDrawUp,
intExAminePerson, intComeInAndGoOutID);
//根据原入库单ID查询该单据明细信息
DataTable dtComeInMinute = myFRM_RuKuGuanLi_UpdateClient.FRM_RuKuGuanLi_Update_Load_SelectComeInMinute(FRM_RuKuGuanLi.intComeInAndGoOutID).Tables[0];
if (dgvComeInMinute.Rows.Count > 0)//dgv不为空
{
for (int i = 0; i < dgvComeInMinute.Rows.Count; i++)//循环dgv
{
//查询入库仓是否已存在该货品
DataTable dtKunCun = myFRM_RuKuGuanLi_InsertClient.FRM_RuKuGuanLi_Insert_SelectKuCun(Convert.ToInt32(dgvComeInMinute.Rows[i].Cells["配件ID"].Value), Convert.ToInt32(dgvComeInMinute.Rows[i].Cells["仓库ID"].Value)).Tables[0];
if (dtKunCun.Rows.Count > 0)//如果已存在
{
//计算库存数
decimal decKuCunShu = Convert.ToDecimal(dgvComeInMinute.Rows[i].Cells["入库数量"].Value) + Convert.ToDecimal(dtKunCun.Rows[0]["StockNumber"]);
//修改该配件的库存数
int intUpdate = myFRM_RuKuGuanLi_InsertClient.FRM_RuKuGuanLi_Insert_btnInsert_ClickUpdateStockNumber(decKuCunShu, Convert.ToInt32(dtKunCun.Rows[0]["StockID"]));
}
else//如果没存在
{
//在入库仓里新增货品
int intInsertStock = myFRM_RuKuGuanLi_InsertClient.FRM_RuKuGuanLi_Insert_InsertStock(Convert.ToInt32(dgvComeInMinute.Rows[i].Cells["配件ID"].Value), Convert.ToInt32(dgvComeInMinute.Rows[i].Cells["仓库ID"].Value), Convert.ToDecimal(dgvComeInMinute.Rows[i].Cells["入库数量"].Value));
}
//给参数赋值
int intComeInAndGoOutID1 = FRM_RuKuGuanLi.intComeInAndGoOutID;
int intPartsID = Convert.ToInt32(dgvComeInMinute.Rows[i].Cells["配件iD"].Value);
int intStorageID = Convert.ToInt32(dgvComeInMinute.Rows[i].Cells["仓库ID"].Value);
int intComeInAndGoOutType = Convert.ToInt32(dgvComeInMinute.Rows[i].Cells["入库类型ID"].Value);
decimal decComeInAndGoOutQuantity = Convert.ToDecimal(dgvComeInMinute.Rows[i].Cells["入库数量"].Value);
decimal decComeInAndGoOutPrice = Convert.ToDecimal(dgvComeInMinute.Rows[i].Cells["入库单价"].Value);
//把入库明细信息保存到数据库
InsertComeInAndGoOutMinute = myFRM_RuKuGuanLi_InsertClient.FRM_RuKuGuanLi_Insert_btnInsert_ClickInsertComeInAndGoOutMinute(intComeInAndGoOutID1,
intPartsID, intStorageID, intComeInAndGoOutType, decComeInAndGoOutQuantity, decComeInAndGoOutPrice);
}
}
if (intUpdateComeIn > 0 || InsertComeInAndGoOutMinute > 0)//如果成功调用方法
{
MessageBox.Show("保存成功!");
}
intNember = 1;//变量赋值1
}
4、窗体关闭事件
第一步:界面层(UIL)
BLL海马汽车销售系统.库存管理.FRM_RuKuGuanLi_Insert.FRM_RuKuGuanLi_InsertClient myFRM_RuKuGuanLi_InsertClient =
new BLL海马汽车销售系统.库存管理.FRM_RuKuGuanLi_Insert.FRM_RuKuGuanLi_InsertClient();
private void FRM_RuKuGuanLi_Update_FormClosing(object sender, FormClosingEventArgs e)
{
if (intNember == 0) //如果变量值为1
{
if (dtComeInMinute.Rows.Count > 0) //定义表不为空
{
for (int i = 0; i < dtComeInMinute.Rows.Count; i++)//循环表
{
//给参数赋值
int intComeInAndGoOutID1 = FRM_RuKuGuanLi.intComeInAndGoOutID;
int intPartsID = Convert.ToInt32(dtComeInMinute.Rows[i]["PartsID"]);
int intStorageID = Convert.ToInt32(dtComeInMinute.Rows[i]["StorageID"]);
int intComeInAndGoOutType = Convert.ToInt32(dtComeInMinute.Rows[i]["ComeInAndGoOutTypeID"]);
decimal decComeInAndGoOutQuantity = Convert.ToDecimal(dtComeInMinute.Rows[i]["ComeInAndGoOutQuantity"]);
decimal decComeInAndGoOutPrice = Convert.ToDecimal(dtComeInMinute.Rows[i]["ComeInAndGoOutPrice"]);
//把入库明细信息保存到数据库
int InsertComeInAndGoOutMinute = myFRM_RuKuGuanLi_InsertClient.FRM_RuKuGuanLi_Insert_btnInsert_ClickInsertComeInAndGoOutMinute(intComeInAndGoOutID1,
intPartsID, intStorageID, intComeInAndGoOutType, decComeInAndGoOutQuantity, decComeInAndGoOutPrice);
}
}
}
}
以上仅供学习参考,禁止用于商业用途!!!