海马汽车经销商管理系统技术解析(十六)入库修改

入库修改

入库修改界面见下图:

 

从【入库修改】界面可以看到控件有:

控件

说明

文本框(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);
                    }
                }
            }
        }


以上仅供学习参考,禁止用于商业用途!!!

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值