钟表维修管理系统技术解析(三)销售记录中的导出Excel、付款、修改、报废

导出Excel功能实现:

第一步:创建导出Excel的方法,参数是DataGridView

#region DataGridView导出到Excel,有一定的判断性
        ///方法,导出DataGridView中的数据到Excel文件   
        /// </summary>   
        /// <remarks>  
        /// add com "Microsoft Excel 11.0 Object Library"  
        /// using Excel=Microsoft.Office.Interop.Excel;  
        /// using System.Reflection;  
        /// </remarks>  
        /// <param name= "dgv"> DataGridView </param>   
        public static void DataGridViewToExcel(DataGridView dgv)
        {
            #region   验证可操作性
            SaveFileDialog dlg = new SaveFileDialog();//申明保存对话框   
            dlg.DefaultExt = "xls ";//默然文件后缀   
            dlg.Filter = "EXCEL文件(*.XLS)|*.xls ";//文件后缀列表   
            dlg.InitialDirectory = Directory.GetCurrentDirectory();//默然路径是系统当前路径   
            if (dlg.ShowDialog() == DialogResult.Cancel) return;//打开保存对话框   
            string fileNameString = dlg.FileName;  //返回文件路径   
            if (fileNameString.Trim() == " ") //验证strFileName是否为空或值无效   
            {
                MessageBox.Show("名字不能为空,请输入文件名字 ", "提示 ", MessageBoxButtons.OK, MessageBoxIcon.Information);
                return;
            }
            int rowscount = dgv.Rows.Count; //定义表格内数据的行数和列数   
            int colscount = dgv.Columns.Count;
            if (rowscount <= 0) //行数必须大于0   
            {
                MessageBox.Show("没有数据可供保存 ", "提示 ", MessageBoxButtons.OK, MessageBoxIcon.Information);
                return;
            }
            if (colscount <= 0) //列数必须大于0   
            {
                MessageBox.Show("没有数据可供保存 ", "提示 ", MessageBoxButtons.OK, MessageBoxIcon.Information);
                return;
            }
            if (rowscount > 65536) //行数不可以大于65536   
            {
                MessageBox.Show("数据记录数太多(最多不能超过65536条),不能保存 ", "提示 ", MessageBoxButtons.OK, MessageBoxIcon.Information);
                return;
            }
            if (colscount > 255)//列数不可以大于255   
            {
                MessageBox.Show("数据记录行数太多,不能保存 ", "提示 ", MessageBoxButtons.OK, MessageBoxIcon.Information);
                return;
            }
            FileInfo file = new FileInfo(fileNameString); //验证以fileNameString命名的文件是否存在,如果存在删除它   
            if (file.Exists)
            {
                try
                {
                    file.Delete();
                }
                catch (Exception error)
                {
                    MessageBox.Show(error.Message, "删除失败 ", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    return;
                }
            }
            #endregion
            Microsoft.Office.Interop.Excel.Application objExcel = null;
            Microsoft.Office.Interop.Excel.Workbook objWorkbook = null;
            Microsoft.Office.Interop.Excel.Worksheet objsheet = null;
            try
            {

                objExcel = new Microsoft.Office.Interop.Excel.Application();//申明对象  
                objWorkbook = objExcel.Workbooks.Add(Missing.Value);
                objsheet = (Microsoft.Office.Interop.Excel.Worksheet)objWorkbook.ActiveSheet;

                objExcel.Visible = false;//设置EXCEL不可见   
                int displayColumnsCount = 1; //向Excel中写入表格的表头   
                for (int i = 0; i <= dgv.ColumnCount - 1; i++)
                {
                    if (dgv.Columns[i].Visible == true)
                    {
                        objExcel.Cells[1, displayColumnsCount] = dgv.Columns[i].HeaderText.Trim();
                        displayColumnsCount++;
                    }
                }
                for (int row = 0; row <= dgv.RowCount - 1; row++)
                {
                    displayColumnsCount = 1;
                    for (int col = 0; col < colscount; col++)
                    {
                        if (dgv.Columns[col].Visible == true)
                        {
                            try
                            {
                                objExcel.Cells[row + 2, displayColumnsCount] = dgv.Rows[row].Cells[col].Value.ToString().Trim();
                                displayColumnsCount++;
                            }
                            catch (Exception)
                            {

                            }

                        }
                    }
                }
                objWorkbook.SaveAs(fileNameString, Missing.Value, Missing.Value, Missing.Value, Missing.Value,
                        Missing.Value, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlShared, Missing.Value, Missing.Value, Missing.Value,
                        Missing.Value, Missing.Value);
            }
            catch (Exception error)
            {
                MessageBox.Show(error.Message, "警告 ", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                return;
            }
            finally
            {
                //关闭Excel应用   
                if (objWorkbook != null) objWorkbook.Close(Missing.Value, Missing.Value, Missing.Value);
                if (objExcel.Workbooks != null) objExcel.Workbooks.Close();
                if (objExcel != null) objExcel.Quit();

                objsheet = null;
                objWorkbook = null;
                objExcel = null;
            }
            MessageBox.Show(fileNameString + "\n\n导出完毕! ", "提示 ", MessageBoxButtons.OK, MessageBoxIcon.Information);
        }
        #endregion 

第二步:导出Excel按钮的单击事件触发自定义的导出Excel方法

private void btnDaoChuEXCEL_Click(object sender, EventArgs e)
        {
            DataGridViewToExcel(dgvXiaoShouDan);
        }

付款功能实现:

付款按钮的单击事件,付款窗体的代码在录入销售单中实现

private void btnFuKuan_Click(object sender, EventArgs e)
        {
            if (dgvXiaoShouDan.Rows.Count > 0)//判断DGV有没有数据
            {
                if (dgvXiaoShouDan.CurrentRow.Cells["付款状态"].Value.ToString().Trim() == "未付款")//只有是未付款的单据才能付款
                {
                    int[] intXiaoShouDanIDs = new int[1];//声明整形数组(之所以用数组是因为录入销售单的时候会有再录一条功能)
                    intXiaoShouDanIDs[0] = Convert.ToInt32(dgvXiaoShouDan.CurrentRow.Cells["销售单ID"].Value);//获取当前行的销售单ID
                    int intGeShu = 1;//销售单的条数
                    frmXiaoShouKaiDan_JieZhang myfrmXiaoShouKaiDan_JieZhang = new frmXiaoShouKaiDan_JieZhang(intXiaoShouDanIDs,intGeShu,1);//实例化付款窗体
                    myfrmXiaoShouKaiDan_JieZhang.ShowDialog();//弹出付款窗体
                    dgvXiaoShouDan.DataSource = ChaXunShuJu(intPageSize, intPageIndex, false, true);//关闭付款窗体后自动查询一次(刷新)
                }
                else
                {
                    MessageBox.Show("当前销售单已付款,不能执行付款操作!", "提示!", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);//提示
                }
            }
            else
            {
                MessageBox.Show("当前销售单为空,请查询后再操作!", "提示!", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);//提示
            }
        }

新增功能实现:

新增功能就是录入销售单模块,具体实现在录入销售单中。

修改功能实现:

1、修改按钮的单击事件

private void btnXiuGai_Click(object sender, EventArgs e)
        {
            if (dgvXiaoShouDan.Rows.Count > 0)//判断DGV是否有数据
            {
                if (dgvXiaoShouDan.CurrentRow.Cells["付款状态"].Value.ToString().Trim() == "未付款")//判断是否已经付款
                {
                    int intXiaoShouDanID = Convert.ToInt32(dgvXiaoShouDan.CurrentRow.Cells["销售单ID"].Value);//获取当前行的销售单ID
                    frmXiaoShouKaiDan_Update myfrmXiaoShouKaiDan_Update = new frmXiaoShouKaiDan_Update(intXiaoShouDanID);//实例化修改销售单窗体,并传销售单ID过去
                    myfrmXiaoShouKaiDan_Update.ShowDialog();//弹出修改窗体
                    dgvXiaoShouDan.DataSource = ChaXunShuJu(intPageSize, intPageIndex, false, true);//修改窗体关闭后,自动查询(刷新)一次
                }
                else
                {
                    MessageBox.Show("当前销售单已付款,不能执行修改操作!", "提示!", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);//提示
                }
            }
            else
            {
                MessageBox.Show("当前销售单为空,请查询后再操作!", "提示!", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);//提示
            }
        }

2、修改销售单窗体的代码

(1)在界面层(UIL)中建一个全局变量,然后在构造方法中给全局变量赋值

int intXiaoShouDanID = 0; //销售单ID 
public frmXiaoShouKaiDan_Update(int XiaoShouDanID)
        {
            intXiaoShouDanID = XiaoShouDanID;//赋值
            InitializeComponent();
        }

(2)在窗体的Load事件中把销售单的各项信息赋值到各个控件中显示出来,DGV输入限制、自动计算金额、选择客户,选择品牌,选择产品,在录入销售单中给出代码

第二步:存储过程代码

IF (@TYPE = 'frmXiaoShouKaiDan_Insert_Load_SelectBaoXiuQi')
	BEGIN	
		SELECT     BaoXiuQiID, RTRIM(BaoXiuQiMingCheng) AS BaoXiuQiMingCheng,YouXiaoFou
		--查询的列
		FROM         sys_BaoXiuQi
		--从哪个表查询
	END
	
	IF (@TYPE = 'frmXiaoShouKaiDan_Insert_Load_SelectXiaoShouLeiXing')
	BEGIN
		SELECT		ShuXingMingXiID AS ShuXingMingXiID,LTRIM(RTRIM(ShuXingMingXiMingCheng))AS ShuXingMingXiMingCheng
		--查询的列
		FROM		sys_ShuXingMingXi
		--从哪个表查询
		WHERE		ShuXingJiHeID=18 AND YouXiaoFou=1
		--查询条件
	END
	
	IF (@TYPE = 'frmXiaoShouKaiDan_Insert_Load_SelectZhongBiaoKuanShi')
	BEGIN
		SELECT		ShuXingMingXiID AS ShuXingMingXiID,LTRIM(RTRIM(ShuXingMingXiMingCheng))AS ShuXingMingXiMingCheng
		--查询的列
		FROM		sys_ShuXingMingXi
		--从哪个表查询
		WHERE		ShuXingJiHeID=28 AND YouXiaoFou=1
		--查询条件
	END

IF (@TYPE = 'frmXiaoShouKaiDan_Update_Load_SelectXiaoShouDan')
	BEGIN
	SELECT     pw_XiaoShouDan.XiaoShouDanID, pw_XiaoShouDan.KeHuID, RTRIM(LTRIM(sys_KeHu.KeHuXingMing)) AS KeHuXingMing, RTRIM(LTRIM(sys_KeHu.YiDongShouJi)) AS YiDongShouJi, 
						  RTRIM(LTRIM(sys_KeHu.TongXunDiZhi)) AS TongXunDiZhi, pw_XiaoShouDan.LuRuYuanID, pw_XiaoShouDan.FuKuanZhuangTaiID, pw_XiaoShouDan.XiaoShouLeiXingID, 
						  pw_XiaoShouDan.XiaoShouRiQi, pw_XiaoShouDan.YingShouJinE, pw_XiaoShouDan.ShiShouJinE, pw_XiaoShouDan.GengXinShiJian, RTRIM(LTRIM(pw_XiaoShouDan.BeiZhu)) AS BeiZhu, 
						  RTRIM(LTRIM(pw_XiaoShouDan.XiaoShouDanBianHao)) AS XiaoShouDanBianHao, pw_XiaoShouDan.XiaoShouFangShiID, pw_XiaoShouDan.SongHuoFangShiID, 
						  pw_XiaoShouDan.FuKuanFangShiID, pw_XiaoShouDan.FuKuanLeiXingID, pw_XiaoShouDan.PinPaiID, pw_XiaoShouDan.ZhongBiaoKuanShiID, pw_XiaoShouDan.DiKeHao, 
						  sys_PinPai.PinPaiMingCheng
	FROM         pw_XiaoShouDan INNER JOIN
						  sys_KeHu ON pw_XiaoShouDan.KeHuID = sys_KeHu.KeHuID INNER JOIN
						  sys_PinPai ON pw_XiaoShouDan.PinPaiID = sys_PinPai.PinPaiID
	WHERE		pw_XiaoShouDan.XiaoShouDanID=@XiaoShouDanID
	END

IF (@TYPE = 'frmXiaoShouKaiDan_Update_Load_SelectXiaoShouDanMingXi')
	BEGIN
	SELECT     pw_XiaoShouDanMingXi.ChanPinID, pw_XiaoShouDanMingXi.CangWeiID, RTRIM(sys_CangWei.CangWeiMingCheng) AS CangWeiMingCheng, sys_KuCun.KuCunShuLiang, pw_XiaoShouDanMingXi.DanJia, 
						  pw_XiaoShouDanMingXi.ShuLiang, sys_ChanPinZiLiao.ChanPinZhongLeiID, sys_ChanPinZiLiao.ChanPinPinPaiID, RTRIM(sys_ChanPinZiLiao.ChanPinMingCheng) AS ChanPinMingCheng, RTRIM(sys_ChanPinZiLiao.ChanPinBianHao) AS ChanPinBianHao, 
						  pw_XiaoShouDanMingXi.XiaoShouDanMingXiID, RTRIM(sys_PinPai.PinPaiMingCheng) AS PinPaiMingCheng, RTRIM(sys_PinZhong.PinZhongMingCheng) AS PinZhongMingCheng, pw_XiaoShouDanMingXi.BaoXiuQiID, RTRIM(pw_XiaoShouDan.XiaoShouDanBianHao) AS XiaoShouDanBianHao, 
						  pw_XiaoShouDanMingXi.XiaoShouDanID
	FROM         pw_XiaoShouDanMingXi INNER JOIN
						  sys_ChanPinZiLiao ON pw_XiaoShouDanMingXi.ChanPinID = sys_ChanPinZiLiao.ChanPinID INNER JOIN
						  sys_CangWei ON pw_XiaoShouDanMingXi.CangWeiID = sys_CangWei.CangWeiID INNER JOIN
						  sys_KuCun ON sys_CangWei.CangWeiID = sys_KuCun.CangWeiID AND sys_ChanPinZiLiao.ChanPinID = sys_KuCun.ChanPinID INNER JOIN
						  sys_PinPai ON sys_ChanPinZiLiao.ChanPinPinPaiID = sys_PinPai.PinPaiID INNER JOIN
						  sys_PinZhong ON sys_ChanPinZiLiao.ChanPinZhongLeiID = sys_PinZhong.PinZhongID INNER JOIN
						  pw_XiaoShouDan ON pw_XiaoShouDanMingXi.XiaoShouDanID = pw_XiaoShouDan.XiaoShouDanID
	WHERE		pw_XiaoShouDanMingXi.XiaoShouDanID=@XiaoShouDanID
	END

IF (@TYPE = 'frmXiaoShouKaiDan_Update_ChaXunChuRuKuDanJu')
	BEGIN
	SELECT     DanJuBianHao
	FROM         pw_ChuRuKuDanJu
	WHERE		BeiZhu like '%' + LTRIM(RTRIM(@XiaoShouDanBianHao)) + '%' and YouXiaoFou=1
	END
if @type='frmCaiGouGuanLi_Insert_RuKuDan'
	begin
		insert    pw_ChuRuKuDanJu( LuRuYuanID, GongZuoZhanID, DanJuBianHao, RuKuFou,BeiZhu)
		values     (@LuRuYuanID, 4,@DanJuBianHao, 'true',@BeiZhu)
		select @@IDENTITY
	end
IF (@TYPE = 'frmXiaoShouKaiDan_Update_btnBaoCun_DeleteXiaoShouDanMingXi')
	BEGIN
	BEGIN TRAN
		UPDATE		sys_KuCun
		SET			KuCunShuLiang+=@ShuLiang,GengXinShiJian=GETDATE()
		WHERE		CangWeiID=@CangWeiID AND ChanPinID=@ChanPinID
	COMMIT TRAN
	END
IF (@TYPE = 'frmXiaoShouKaiDan_Insert_btnBaoCun_InsertXiaoShouDanMingXi')
	BEGIN
	BEGIN TRAN
		INSERT		pw_XiaoShouDanMingXi(XiaoShouDanID, ChanPinID, CangWeiID, DanJia, ShuLiang,BaoXiuQiID)
		VALUES		(@XiaoShouDanID, @ChanPinID, @CangWeiID, @DanJia, @ShuLiang,@BaoXiuQiID)
		
		UPDATE		sys_KuCun
		SET			KuCunShuLiang-=@ShuLiang,GengXinShiJian=GETDATE()
		WHERE		CangWeiID=@CangWeiID and ChanPinID=@ChanPinID
	COMMIT TRAN
	END
if @type='frmCaiGouTuiHuo_Insert_ChuKuMingXi'
	begin
		insert     pw_ChuRuKuDanJuMingXi(ChuRuKuDanJuID, ChanPinID, CangWeiID, ShuLiang, JinE)
		values         (@ChuRuKuDanJuID, @ChanPinID, @CangWeiID, @ShuLiang, @JinE)
	end

第三步:逻辑层(BLL)代码

DALPublic.DALMethod myDALMethod = new DALPublic.DALMethod();//实例化数据层(DAL)
        public DataTable frmXiaoShouKaiDan_Insert_Load_SelectBaoXiuQi()//方法名称
        {
            SqlParameter[] mySqlParameters ={
                                                new SqlParameter("@TYPE",SqlDbType.Char)//声明变量数组
                                            };
            mySqlParameters[0].Value = "frmXiaoShouKaiDan_Insert_Load_SelectBaoXiuQi";//给变量数组的第一个赋值

            return myDALMethod.QueryDataTable("frmXiaoShouKaiDan_Insert", mySqlParameters);//第一个参数是数据库名称,第二个参数是数组
        }

public DataTable frmXiaoShouKaiDan_Insert_Load_SelectXiaoShouLeiXing()
        {
            SqlParameter[] mySqlParameters ={
                                                new SqlParameter("@TYPE",SqlDbType.Char)
                                            };
            mySqlParameters[0].Value = "frmXiaoShouKaiDan_Insert_Load_SelectXiaoShouLeiXing";

            return myDALMethod.QueryDataTable("frmXiaoShouKaiDan_Insert", mySqlParameters);
        }

public DataTable frmXiaoShouKaiDan_Insert_Load_SelectZhongBiaoKuanShi()
        {
            SqlParameter[] mySqlParameters ={
                                                new SqlParameter("@TYPE",SqlDbType.Char)
                                            };
            mySqlParameters[0].Value = "frmXiaoShouKaiDan_Insert_Load_SelectZhongBiaoKuanShi";

            return myDALMethod.QueryDataTable("frmXiaoShouKaiDan_Insert", mySqlParameters);
        }

        public DataTable frmXiaoShouKaiDan_Update_Load_SelectXiaoShouDan(int intXiaoShouDanID)
        {
            SqlParameter[] mySqlParameters ={
                                                new SqlParameter("@TYPE",SqlDbType.Char),
                                                new SqlParameter("@XiaoShouDanID",SqlDbType.Int)
                                            };
            mySqlParameters[0].Value = "frmXiaoShouKaiDan_Update_Load_SelectXiaoShouDan";
            mySqlParameters[1].Value = intXiaoShouDanID;

            return myDALMethod.QueryDataTable("frmXiaoShouKaiDan_Update", mySqlParameters);
        }

        public DataTable frmXiaoShouKaiDan_Update_Load_SelectXiaoShouDanMingXi(int intXiaoShouDanID)
        {
            SqlParameter[] mySqlParameters ={
                                                new SqlParameter("@TYPE",SqlDbType.Char),
                                                new SqlParameter("@XiaoShouDanID",SqlDbType.Int)
                                            };
            mySqlParameters[0].Value = "frmXiaoShouKaiDan_Update_Load_SelectXiaoShouDanMingXi";
            mySqlParameters[1].Value = intXiaoShouDanID;

            return myDALMethod.QueryDataTable("frmXiaoShouKaiDan_Update", mySqlParameters);
        }
public DataTable frmXiaoShouKaiDan_Update_ChaXunChuRuKuDanJu(string strXiaoShouDanBianHao)
        {
            SqlParameter[] mySqlParameters ={
                                                new SqlParameter("@TYPE",SqlDbType.Char),
                                                new SqlParameter("@XiaoShouDanBianHao",SqlDbType.Char),
                                            };
            mySqlParameters[0].Value = "frmXiaoShouKaiDan_Update_ChaXunChuRuKuDanJu";
            mySqlParameters[1].Value = strXiaoShouDanBianHao;

            return myDALMethod.QueryDataTable("frmXiaoShouKaiDan_Update", mySqlParameters);
        }
public DataTable frmCaiGouGuanLi_Insert_RuKuDan(int intLuRuYuanID, string strDanJuBianHao,string strBeiZhu)
        {
            SqlParameter[] mySqlParameters = {
                                                 new SqlParameter("@type",SqlDbType.Char),
                                                 new SqlParameter("@LuRuYuanID",SqlDbType.Int),
                                                 new SqlParameter("@DanJuBianHao",SqlDbType.Char),
                                                 new SqlParameter("@BeiZhu",SqlDbType.Char),
                                             };
            mySqlParameters[0].Value = "frmCaiGouGuanLi_Insert_RuKuDan";
            mySqlParameters[1].Value = intLuRuYuanID;
            mySqlParameters[2].Value = strDanJuBianHao;
            mySqlParameters[3].Value = strBeiZhu;
            return myDALMethod.QueryDataTable("frmCaiGouGuanLi", mySqlParameters);
        }
public int frmXiaoShouKaiDan_Update_btnBaoCun_DeleteXiaoShouDanMingXi( int intChanPinID, int intCangWeiID, int intShuLiang)
        {
            SqlParameter[] mySqlParameters ={
                                                new SqlParameter("@TYPE",SqlDbType.Char),
                                                new SqlParameter("@ChanPinID",SqlDbType.Int),
                                                new SqlParameter("@CangWeiID",SqlDbType.Int),
                                                new SqlParameter("@ShuLiang",SqlDbType.Int),
                                            };
            mySqlParameters[0].Value = "frmXiaoShouKaiDan_Update_btnBaoCun_DeleteXiaoShouDanMingXi";
            mySqlParameters[1].Value = intChanPinID;
            mySqlParameters[2].Value = intCangWeiID;
            mySqlParameters[3].Value = intShuLiang;

            return myDALMethod.UpdateData("frmXiaoShouKaiDan_Update", mySqlParameters);
        }
public int frmXiaoShouKaiDan_Insert_btnBaoCun_InsertXiaoShouDanMingXi(int intXiaoShouDanID, int intChanPinID, int intCangWeiID, decimal decDanJia, int intShuLiang,int intBaoXiuQiID)
        {
            SqlParameter[] mySqlParameters ={
                                                new SqlParameter("@TYPE",SqlDbType.Char),
                                                new SqlParameter("@XiaoShouDanID",SqlDbType.Int),
                                                new SqlParameter("@ChanPinID",SqlDbType.Int),
                                                new SqlParameter("@CangWeiID",SqlDbType.Int),
                                                new SqlParameter("@DanJia",SqlDbType.Decimal),
                                                new SqlParameter("@ShuLiang",SqlDbType.Int),
                                                new SqlParameter("@BaoXiuQiID",SqlDbType.Int),
                                            };
            mySqlParameters[0].Value = "frmXiaoShouKaiDan_Insert_btnBaoCun_InsertXiaoShouDanMingXi";
            mySqlParameters[1].Value = intXiaoShouDanID;
            mySqlParameters[2].Value = intChanPinID;
            mySqlParameters[3].Value = intCangWeiID;
            mySqlParameters[4].Value = decDanJia;
            mySqlParameters[5].Value = intShuLiang;
            mySqlParameters[6].Value = intBaoXiuQiID;

            return myDALMethod.UpdateData("frmXiaoShouKaiDan_Insert", mySqlParameters);
        }
public DataTable frmCaiGouTuiHuo_Insert_ChuKuMingXi(int intChuRuKuDanJuID, int intChanPinID, int intCangWeiID, int intShuLiang)
        {
            SqlParameter[] mySqlParameters = {
                                                 new SqlParameter("@type",SqlDbType.Char),
                                                 new SqlParameter("@ChuRuKuDanJuID",SqlDbType.Int),
                                                 new SqlParameter("@ChanPinID",SqlDbType.Int),
                                                 new SqlParameter("@CangWeiID",SqlDbType.Int),
                                                 new SqlParameter("@ShuLiang",SqlDbType.Int),
                                             };
            mySqlParameters[0].Value = "frmCaiGouTuiHuo_Insert_ChuKuMingXi";
            mySqlParameters[1].Value = intChuRuKuDanJuID;
            mySqlParameters[2].Value = intChanPinID;
            mySqlParameters[3].Value = intCangWeiID;
            mySqlParameters[4].Value = intShuLiang;
            return myDALMethod.QueryDataTable("frmCaiGouTuiHuo", mySqlParameters);
        }

第四步 :界面层(UIL)代码,Load事件

BLL.BLL_XiaoShouGuanLi.frmXiaoShouKaiDan_Insert myfrmXiaoShouKaiDan_Insert = new BLL.BLL_XiaoShouGuanLi.frmXiaoShouKaiDan_Insert();
        BLL.BLL_XiaoShouGuanLi.frmXiaoShouKaiDan_Update myfrmXiaoShouKaiDan_Update = new BLL.BLL_XiaoShouGuanLi.frmXiaoShouKaiDan_Update();
        BLL.BLLCaiGouGuanLi.frmCaiGouGuanLi myfrmCaiGouGuanLi = new BLL.BLLCaiGouGuanLi.frmCaiGouGuanLi();
        BLL.BLLCaiGouGuanLi.frmCaiGouTuiHuo myfrmCaiGouTuiHuo = new BLL.BLLCaiGouGuanLi.frmCaiGouTuiHuo();
DataTable dtBaoXiuQi = new DataTable();//全局变量
DataTable dtBaoXiuQiWeiShanChu = new DataTable();//全局变量

private void frmXiaoShouKaiDan_Update_Load(object sender, EventArgs e)
        {
dtBaoXiuQi = myfrmXiaoShouKaiDan_Insert.frmXiaoShouKaiDan_Insert_Load_SelectBaoXiuQi();//查询保修期表,查询出保修期ID和保修期名称和有效否

            dtBaoXiuQiWeiShanChu.Columns.Add("BaoXiuQiMingCheng", typeof(string));//给dtBaoXiuQiWeiShanChu添加列,第一个参数是列名,第二个参数是数据类型
            dtBaoXiuQiWeiShanChu.Columns.Add("BaoXiuQiID", typeof(int));
            dtBaoXiuQiWeiShanChu.Columns.Add("YouXiaoFou", typeof(bool));
            for (int i = 0; i < dtBaoXiuQi.Rows.Count; i++)
            {
                if (Convert.ToBoolean(dtBaoXiuQi.Rows[i]["YouXiaoFou"]))//循环判断dtBaoXiuQi,把有效否(YouXiaoFou)为True的添加到dtBaoXiuQiWeiShanChu中
                {
                    dtBaoXiuQiWeiShanChu.Rows.Add();//添加一行空行
                    dtBaoXiuQiWeiShanChu.Rows[dtBaoXiuQiWeiShanChu.Rows.Count - 1]["BaoXiuQiMingCheng"] = dtBaoXiuQi.Rows[i]["BaoXiuQiMingCheng"].ToString().Trim();//赋值
                    dtBaoXiuQiWeiShanChu.Rows[dtBaoXiuQiWeiShanChu.Rows.Count - 1]["BaoXiuQiID"] = Convert.ToInt32(dtBaoXiuQi.Rows[i]["BaoXiuQiID"]);
                    dtBaoXiuQiWeiShanChu.Rows[dtBaoXiuQiWeiShanChu.Rows.Count - 1]["YouXiaoFou"] = true;
                }
            }
            //保修期为什么不只是,把有效否为True的查出来?因为这里是修改,而旧单据中选择的保修期可能已经被删除,赋值环节没有被删除的保修期,会出错
            保修期.DataSource = dtBaoXiuQiWeiShanChu;//绑定数据源
            保修期.DisplayMember = "BaoXiuQiMingCheng";//绑定显示文本
            保修期.ValueMember = "BaoXiuQiID";//绑定ID

            cboKuanShi.DataSource = myfrmXiaoShouKaiDan_Insert.frmXiaoShouKaiDan_Insert_Load_SelectZhongBiaoKuanShi();//绑定数据源
            cboKuanShi.DisplayMember = "ShuXingMingXiMingCheng";//绑定显示文本
            cboKuanShi.ValueMember = "ShuXingMingXiID";//绑定ID

            cboXiaoShouLeiXing.DataSource = myfrmXiaoShouKaiDan_Insert.frmXiaoShouKaiDan_Insert_Load_SelectXiaoShouLeiXing();
            cboXiaoShouLeiXing.DisplayMember = "ShuXingMingXiMingCheng";
            cboXiaoShouLeiXing.ValueMember = "ShuXingMingXiID";

try
            {
                DataTable dtXiaoShouDan = myfrmXiaoShouKaiDan_Update.frmXiaoShouKaiDan_Update_Load_SelectXiaoShouDan(intXiaoShouDanID);//根据销售单ID查询出销售单,以下都是赋值
                dtpXiaoShouRiQi.Value = Convert.ToDateTime(dtXiaoShouDan.Rows[0]["XiaoShouRiQi"]);
                intKeHuID = Convert.ToInt32(dtXiaoShouDan.Rows[0]["KeHuID"]);
                intPinPaiID = Convert.ToInt32(dtXiaoShouDan.Rows[0]["PinPaiID"]);
                txtPinPai.Text = dtXiaoShouDan.Rows[0]["PinPaiMingCheng"].ToString().Trim();
                txtDiKeHao.Text = dtXiaoShouDan.Rows[0]["DiKeHao"].ToString().Trim();
                txtBeiZhu.Text = dtXiaoShouDan.Rows[0]["BeiZhu"].ToString().Trim();
                txtKeHuXingMing.Text = dtXiaoShouDan.Rows[0]["KeHuXingMing"].ToString().Trim();
                txtLianXiDianHua.Text = dtXiaoShouDan.Rows[0]["YiDongShouJi"].ToString().Trim();
                txtLianXiDiZhi.Text = dtXiaoShouDan.Rows[0]["TongXunDiZhi"].ToString().Trim();
                txtXiaoShouDanBianHao.Text = dtXiaoShouDan.Rows[0]["XiaoShouDanBianHao"].ToString().Trim();
                try//出错后调到catch { }中(catch { })里面是空的,所以没什么事发生
                {
                    cboKuanShi.SelectedValue = Convert.ToInt32(dtXiaoShouDan.Rows[0]["ZhongBiaoKuanShiID"]);
                    cboXiaoShouLeiXing.SelectedValue = Convert.ToInt32(dtXiaoShouDan.Rows[0]["XiaoShouLeiXingID"]);
                }
                catch { }

                dtXiaoShouDanMingXi = myfrmXiaoShouKaiDan_Update.frmXiaoShouKaiDan_Update_Load_SelectXiaoShouDanMingXi(intXiaoShouDanID);//根据销售单ID查出销售单明细
                for (int i = 0; i < dtXiaoShouDanMingXi.Rows.Count; i++)//销售单明细循环添加到DGV里面
                {
                    dgvChanPinMingXi.Rows.Add(1);
                    dgvChanPinMingXi.Rows[i].Cells["产品ID"].Value = dtXiaoShouDanMingXi.Rows[i]["ChanPinID"];
                    dgvChanPinMingXi.Rows[i].Cells["所在仓位ID"].Value = dtXiaoShouDanMingXi.Rows[i]["CangWeiID"];
                    dgvChanPinMingXi.Rows[i].Cells["编号"].Value = dtXiaoShouDanMingXi.Rows[i]["ChanPinBianHao"];
                    dgvChanPinMingXi.Rows[i].Cells["名称"].Value = dtXiaoShouDanMingXi.Rows[i]["ChanPinMingCheng"];
                    dgvChanPinMingXi.Rows[i].Cells["品牌"].Value = dtXiaoShouDanMingXi.Rows[i]["PinPaiMingCheng"];
                    dgvChanPinMingXi.Rows[i].Cells["品种"].Value = dtXiaoShouDanMingXi.Rows[i]["PinZhongMingCheng"];
                    dgvChanPinMingXi.Rows[i].Cells["所在仓位"].Value = dtXiaoShouDanMingXi.Rows[i]["CangWeiMingCheng"];
                    dgvChanPinMingXi.Rows[i].Cells["销售价格"].Value = dtXiaoShouDanMingXi.Rows[i]["DanJia"];
                    dgvChanPinMingXi.Rows[i].Cells["销售数量"].Value = dtXiaoShouDanMingXi.Rows[i]["ShuLiang"];
                    dgvChanPinMingXi.Rows[i].Cells["库存数"].Value = Convert.ToDecimal(dtXiaoShouDanMingXi.Rows[i]["KuCunShuLiang"]) + Convert.ToDecimal(dgvChanPinMingXi.Rows[i].Cells["销售数量"].Value);
                    dgvChanPinMingXi.Rows[i].Cells["小计"].Value = Convert.ToDecimal(dgvChanPinMingXi.Rows[i].Cells["销售价格"].Value) * Convert.ToDecimal(dgvChanPinMingXi.Rows[i].Cells["销售数量"].Value);
                    try//try{}catch{}代码,try中如果有出错,直接跳到catch{}中,防止系统崩溃
                    {
                        for (int j = 0; j < dtBaoXiuQi.Rows.Count; j++)
                        {
                            if (Convert.ToInt32(dtXiaoShouDanMingXi.Rows[i]["BaoXiuQiID"]) == Convert.ToInt32(dtBaoXiuQi.Rows[j]["BaoXiuQiID"]))//循环判断dtBaoXiuQi中,与销售单明细中保修期ID相等的行
                            {
                                if (Convert.ToBoolean(dtBaoXiuQi.Rows[j]["YouXiaoFou"]))//如果此行有效否为True
                                {
                                    dgvChanPinMingXi.Rows[i].Cells["保修期"].Value = Convert.ToInt32(dtXiaoShouDanMingXi.Rows[i]["BaoXiuQiID"]);//直接绑定到销售单的产品明细
                                }
                                else//如果不是为True
                                {
                                    dtBaoXiuQiWeiShanChu.Rows.Add();//dtBaoXiuQiWeiShanChu中增加一行空行
                                    dtBaoXiuQiWeiShanChu.Rows[dtBaoXiuQiWeiShanChu.Rows.Count - 1]["BaoXiuQiMingCheng"] = dtBaoXiuQi.Rows[j]["BaoXiuQiMingCheng"].ToString().Trim() + "(已删除)";//保修期名称中加上"(已删除)"赋值给新添加的行
                                    dtBaoXiuQiWeiShanChu.Rows[dtBaoXiuQiWeiShanChu.Rows.Count - 1]["BaoXiuQiID"] = Convert.ToInt32(dtBaoXiuQi.Rows[j]["BaoXiuQiID"]);//赋值保修期ID
                                    dtBaoXiuQiWeiShanChu.Rows[dtBaoXiuQiWeiShanChu.Rows.Count - 1]["YouXiaoFou"] = false;//赋值有效否
                                    dtBaoXiuQi.Rows[j]["YouXiaoFou"] = true;//这一行添加到[dtBaoXiuQiWeiShanChu]后,把有效否改为真,避免重复添加
                                    dgvChanPinMingXi.Rows[i].Cells["保修期"].Value = Convert.ToInt32(dtXiaoShouDanMingXi.Rows[i]["BaoXiuQiID"]);//最后绑定到销售单的产品明细
                                }
                                break;
                            }
                        }
                    }
                    catch 
                    {
                    }
                }
            }
            catch { }

}

第五步:保存按钮的单击事件

private void btnBaoCun_Click(object sender, EventArgs e)
        {
            //判断有没有选择客户等信息
            if (intKeHuID == 0 || txtKeHuXingMing.Text == "")
            {
                MessageBox.Show("请按绿色加号按钮选择客户!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
                return;
            }
            if (intPinPaiID == 0 || txtPinPai.Text == "")
            {
                MessageBox.Show("请按绿色加号按钮选择品牌!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
                return;
            }
            if (txtDiKeHao.Text == "")
            {
                MessageBox.Show("请填写底壳号!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
                return;
            }
            if (dgvChanPinMingXi.Rows.Count < 1)
            {
                MessageBox.Show("请录入产品!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
                return;
            }
            for (int i = 0; i < dgvChanPinMingXi.Rows.Count; i++)//循环判断有没有选择保修期
            {
                try
                {
                    if (Convert.ToInt32(dgvChanPinMingXi.Rows[i].Cells["保修期"].Value) == 0)//如果在转化成Int型时,下拉框并没有值,就会出错,出错就会跳到catch
                    {
                        MessageBox.Show("第【" + (i + 1).ToString() + "】行的【保修期】还没选择!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
                        return;//返回,也就是跳出此方法
                    }
                    for (int j = 0; j < dtBaoXiuQiWeiShanChu.Rows.Count; j++)
                    {
                        if (Convert.ToInt32(dgvChanPinMingXi.Rows[i].Cells["保修期"].Value) == Convert.ToInt32(dtBaoXiuQiWeiShanChu.Rows[j]["BaoXiuQiID"]) && Convert.ToBoolean(dtBaoXiuQiWeiShanChu.Rows[j]["YouXiaoFou"]) == false)//循环判断,找出保修期为False的,提示已删除
                        {
                            MessageBox.Show("第【" + (i + 1).ToString() + "】行的【保修期】已删除,请重新选择!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
                            return;
                        }
                    }
                }
                catch
                {
                    MessageBox.Show("第【" + (i + 1).ToString() + "】行的【保修期】还没选择!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
                    return;
                }
            }
            int intLuRuYuanID = Convert.ToInt32(index2.strYuanGongXinXi[0]);//获取登录的员工ID作为录入员ID
            int intXiaoShouLeiXingID = Convert.ToInt32(cboXiaoShouLeiXing.SelectedValue);
            string strXiaoShouDanBianHao = txtXiaoShouDanBianHao.Text;
            DateTime dtmXiaoShouRiQi = dtpXiaoShouRiQi.Value;
            string strBeiZhu = txtBeiZhu.Text;
            int intZhongBiaoKuanShiID = Convert.ToInt32(cboKuanShi.SelectedValue);
            string strDiKeHao = txtDiKeHao.Text;
            decimal decYingShouJinE = 0;
            for (int i = 0; i < dgvChanPinMingXi.Rows.Count; i++)
            {
                decYingShouJinE += Convert.ToDecimal(dgvChanPinMingXi.Rows[i].Cells["小计"].Value);
            }
            string strChuRuKuDanJu = myfrmXiaoShouKaiDan_Update.frmXiaoShouKaiDan_Update_ChaXunChuRuKuDanJu(strXiaoShouDanBianHao).Rows[0][0].ToString().Trim();//查询该销售单的出入库单据
            intXiaoShouDanID =Convert.ToInt32( myfrmXiaoShouKaiDan_Update.frmXiaoShouKaiDan_Update_btnBaoCun_UpdateXiaoShouDan(intLuRuYuanID, intKeHuID,
                                                                    intXiaoShouLeiXingID, strXiaoShouDanBianHao, dtmXiaoShouRiQi, strBeiZhu, intPinPaiID, intZhongBiaoKuanShiID, strDiKeHao, decYingShouJinE, intXiaoShouDanID).Rows[0][0]);//把该销售单和出入库单的有效否改为False,在新增一条新的销售单并查出销售单ID
            if (intXiaoShouDanID > 0)//如果不大于0则代表上面的方法执行失败
            {
                DataTable dtRuKuDan = myfrmCaiGouGuanLi.frmCaiGouGuanLi_Insert_RuKuDan(Convert.ToInt32(index2.strYuanGongXinXi[0]), strChuRuKuDanJu, "销售出库(" + strXiaoShouDanBianHao + ")");//新增出入库单据并查询出出入库单号
                int intShanChuMingXi = 0;
                for (int i = 0; i < dtXiaoShouDanMingXi.Rows.Count; i++)
                {
                    int intChanPinID = Convert.ToInt32(dtXiaoShouDanMingXi.Rows[i]["ChanPinID"]);
                    int intCangWeiID = Convert.ToInt32(dtXiaoShouDanMingXi.Rows[i]["CangWeiID"]);
                    int intShuLiang = Convert.ToInt32(dtXiaoShouDanMingXi.Rows[i]["ShuLiang"]);
                    //修改销售单,库存数量回滚
                    if (myfrmXiaoShouKaiDan_Update.frmXiaoShouKaiDan_Update_btnBaoCun_DeleteXiaoShouDanMingXi(intChanPinID, intCangWeiID, intShuLiang) > 0)
                    {
                        intShanChuMingXi++;//回滚成功,intShanChuMingXi加1
                    }
                }
                if (intShanChuMingXi != dtXiaoShouDanMingXi.Rows.Count)//判断有没有回滚失败
                {
                    MessageBox.Show("【" + (dtXiaoShouDanMingXi.Rows.Count - intShanChuMingXi).ToString() + "】条明细删除失败!", "提示!", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                }

                int intMingXiChengGongCiShu = 0;
                for (int i = 0; i < dgvChanPinMingXi.Rows.Count; i++)
                {
                    int intChanPinID = Convert.ToInt32(dgvChanPinMingXi.Rows[i].Cells["产品ID"].Value);
                    int intCangWeiID = Convert.ToInt32(dgvChanPinMingXi.Rows[i].Cells["所在仓位ID"].Value);
                    decimal decDanJia = Convert.ToDecimal(dgvChanPinMingXi.Rows[i].Cells["销售价格"].Value);
                    int intShuLiang = Convert.ToInt32(dgvChanPinMingXi.Rows[i].Cells["销售数量"].Value);
                    int intBaoXiuQiID = Convert.ToInt32(dgvChanPinMingXi.Rows[i].Cells["保修期"].Value);
                    if (myfrmXiaoShouKaiDan_Insert.frmXiaoShouKaiDan_Insert_btnBaoCun_InsertXiaoShouDanMingXi(intXiaoShouDanID, intChanPinID, intCangWeiID, decDanJia, intShuLiang,intBaoXiuQiID) > 0)//新增销售单明细
                    {
                        myfrmCaiGouTuiHuo.frmCaiGouTuiHuo_Insert_ChuKuMingXi(Convert.ToInt32(dtRuKuDan.Rows[0][0]), intChanPinID, intCangWeiID, intShuLiang);//新增出入库明细
                        intMingXiChengGongCiShu++;
                    }

                }
                if (intMingXiChengGongCiShu != dgvChanPinMingXi.Rows.Count)
                {
                    MessageBox.Show("修改销售单成功,销售单编号【" + strXiaoShouDanBianHao + "】\n【" + (dgvChanPinMingXi.Rows.Count - intMingXiChengGongCiShu).ToString() + "】条明细添加失败!", "提示!", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                    return;
                }
                MessageBox.Show("修改成功,销售单编号【" + strXiaoShouDanBianHao + "】", "提示!", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
                this.Dispose();
                this.Close();
            }
            else
            {
                MessageBox.Show("修改失败!", "提示!", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

报废功能实现:


第一步:存储过程代码

IF (@TYPE = 'frmXiaoShouKaiDan_BaoFei_btnBaoCun_XiaoShouDanBaoFei')
	BEGIN
		UPDATE		pw_XiaoShouDan
		SET			YouXiaoFou=0,BaoFeiYuanYin=@BaoFeiYuanYin
		WHERE		XiaoShouDanID=@XiaoShouDanID
	END
IF (@TYPE = 'frmXiaoShouKaiDan_Update_btnBaoCun_GaiBianShuLiang_ChaXunTiaoJian')
	BEGIN
	BEGIN TRAN
		if(@XiaoShouDanBianHao!=null and @XiaoShouDanBianHao!='' )
		BEGIN
			UPDATE      pw_ChuRuKuDanJu
			SET			YouXiaoFou=0
			WHERE		BeiZhu like '%' + LTRIM(RTRIM(@XiaoShouDanBianHao)) + '%'
		END
		
		SELECT     pw_XiaoShouDanMingXi.XiaoShouDanID, sys_ChanPinZiLiao.ChanPinMingCheng, sys_ChanPinZiLiao.ChanPinBianHao, pw_XiaoShouDanMingXi.DanJia, pw_XiaoShouDanMingXi.ShuLiang, 
						  pw_XiaoShouDanMingXi.ChanPinID, pw_XiaoShouDanMingXi.CangWeiID
		FROM         pw_XiaoShouDanMingXi INNER JOIN
						  sys_ChanPinZiLiao ON pw_XiaoShouDanMingXi.ChanPinID = sys_ChanPinZiLiao.ChanPinID
		WHERE		pw_XiaoShouDanMingXi.XiaoShouDanID=@XiaoShouDanID
	COMMIT TRAN
	END
IF (@TYPE = 'frmXiaoShouKaiDan_Update_btnBaoCun_DeleteXiaoShouDanMingXi')
	BEGIN
	BEGIN TRAN
		UPDATE		sys_KuCun
		SET			KuCunShuLiang+=@ShuLiang,GengXinShiJian=GETDATE()
		WHERE		CangWeiID=@CangWeiID AND ChanPinID=@ChanPinID
	COMMIT TRAN
	END

第二步:逻辑层(BLL)代码

DALPublic.DALMethod myDALMethod = new DALPublic.DALMethod();
        public int frmXiaoShouKaiDan_BaoFei_btnBaoCun_XiaoShouDanBaoFei(int intXiaoShouDanID, string strBaoFeiYuanYin)
        {
            SqlParameter[] mySqlParameters ={
                                                new SqlParameter("@TYPE",SqlDbType.Char),
                                                new SqlParameter("@XiaoShouDanID",SqlDbType.Int),
                                                new SqlParameter("@BaoFeiYuanYin",SqlDbType.Char),
                                            };
            mySqlParameters[0].Value = "frmXiaoShouKaiDan_BaoFei_btnBaoCun_XiaoShouDanBaoFei";
            mySqlParameters[1].Value = intXiaoShouDanID;
            mySqlParameters[2].Value = strBaoFeiYuanYin;

            return myDALMethod.UpdateData("frmXiaoShouKaiDan_BaoFei", mySqlParameters);
        }
public DataTable frmXiaoShouKaiDan_Update_btnBaoCun_GaiBianShuLiang_ChaXunTiaoJian(int XiaoShouDanID,string strXiaoShouDanBianHao)
        {
            SqlParameter[] mySqlParameters ={
                                                new SqlParameter("@TYPE",SqlDbType.Char),
                                                new SqlParameter("@XiaoShouDanID",SqlDbType.Int),
                                                new SqlParameter("@XiaoShouDanBianHao",SqlDbType.Char),
                                            };
            mySqlParameters[0].Value = "frmXiaoShouKaiDan_Update_btnBaoCun_GaiBianShuLiang_ChaXunTiaoJian";
            mySqlParameters[1].Value = XiaoShouDanID;
            mySqlParameters[2].Value = strXiaoShouDanBianHao;
            return myDALMethod.QueryDataTable("frmXiaoShouKaiDan_Update", mySqlParameters);
        }
public int frmXiaoShouKaiDan_Update_btnBaoCun_DeleteXiaoShouDanMingXi( int intChanPinID, int intCangWeiID, int intShuLiang)
        {
            SqlParameter[] mySqlParameters ={
                                                new SqlParameter("@TYPE",SqlDbType.Char),
                                                new SqlParameter("@ChanPinID",SqlDbType.Int),
                                                new SqlParameter("@CangWeiID",SqlDbType.Int),
                                                new SqlParameter("@ShuLiang",SqlDbType.Int),
                                            };
            mySqlParameters[0].Value = "frmXiaoShouKaiDan_Update_btnBaoCun_DeleteXiaoShouDanMingXi";
            mySqlParameters[1].Value = intChanPinID;
            mySqlParameters[2].Value = intCangWeiID;
            mySqlParameters[3].Value = intShuLiang;

            return myDALMethod.UpdateData("frmXiaoShouKaiDan_Update", mySqlParameters);
        }

第三步:界面层(UIL)代码

(1)销售记录窗体的报废按钮的单击事件

private void btnBaoFei_Click(object sender, EventArgs e)
        {
            if (dgvXiaoShouDan.Rows.Count > 0)
            {
                if (dgvXiaoShouDan.CurrentRow.Cells["付款状态"].Value.ToString().Trim() == "未付款")//判断是否已经付款
                {
                    strXiaoShouDanBianHao = dgvXiaoShouDan.CurrentRow.Cells["销售单编号"].Value.ToString().Trim();//获取当前行的销售单编号
                    int intXiaoShouDanID = Convert.ToInt32(dgvXiaoShouDan.CurrentRow.Cells["销售单ID"].Value);//获取当前行的销售单ID
                    frmXiaoShouKaiDan_BaoFei myfrmXiaoShouKaiDan_BaoFei = new frmXiaoShouKaiDan_BaoFei(strXiaoShouDanBianHao, intXiaoShouDanID);//实例化报废窗体,并把销售单编号和销售单ID传过去
                    myfrmXiaoShouKaiDan_BaoFei.ShowDialog();//弹出报废窗体
                    dgvXiaoShouDan.DataSource = ChaXunShuJu(intPageSize, intPageIndex, false, true);//关闭报废窗体后,自动查询(刷新)一次
                }
                else
                {
                    MessageBox.Show("当前销售单已付款,不能执行报废操作!", "提示!", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);//提示
                }

            }
            else
            {
                MessageBox.Show("当销前售单为空,请查询后再操作!", "提示!", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
            }
        }

(2)报废窗体的构造方法

BLL.BLL_XiaoShouGuanLi.frmXiaoShouKaiDan_BaoFei myfrmXiaoShouKaiDan_BaoFei = new BLL.BLL_XiaoShouGuanLi.frmXiaoSho
uKaiDan_BaoFei();//实例化BLL
        BLL.BLL_XiaoShouGuanLi.frmXiaoShouKaiDan_Update myfrmXiaoShouKaiDan_Update = new BLL.BLL_XiaoShouGuanLi.frmXiaoShouKaiDan_Update();//实例化BLL
        int intXiaoShouDanID = 0;//全局变量
        public frmXiaoShouKaiDan_BaoFei(string strXiaoShouDanBianHao,int XiaoShouDanID)
        {
            InitializeComponent();
            btnBaoCun.BackColor = Color.FromArgb(80, 225, 225, 225);
            btnFanHui.BackColor = Color.FromArgb(80, 225, 225, 225);
            intXiaoShouDanID = XiaoShouDanID;//给全局变量赋值
            txtXiaoShouDanBianHao.Text = strXiaoShouDanBianHao;//给销售单编号文本框赋值
            txtBaoFeiYuanYin.Focus();//为报废原因文本框设置输入焦点
        }

(3)确定(报废)按钮的单击事件

private void btnBaoCun_Click(object sender, EventArgs e)
        {
            string strBaoFeiYuanYin = txtBaoFeiYuanYin.Text;
            if (strBaoFeiYuanYin == "")//判断是否填写了报废原因
            {
                MessageBox.Show("请填写报废原因!", "提示!", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
                txtBaoFeiYuanYin.Focus();
                return;
            }
            if (myfrmXiaoShouKaiDan_BaoFei.frmXiaoShouKaiDan_BaoFei_btnBaoCun_XiaoShouDanBaoFei(intXiaoShouDanID, strBaoFeiYuanYin) > 0)//修改销售单有效否为False,修改报废原因
            {
                DataTable dtTiaoJian = myfrmXiaoShouKaiDan_Update.frmXiaoShouKaiDan_Update_btnBaoCun_GaiBianShuLiang_ChaXunTiaoJian(intXiaoShouDanID,txtXiaoShouDanBianHao.Text.ToString().Trim());//把销售单的出入库单据有效否改为False,并查出销售单明细
                if (dtTiaoJian.Rows.Count > 0)
                {
                    for (int i = 0; i < dtTiaoJian.Rows.Count; i++)
                    {
                        int ShuLiang = Convert.ToInt32(dtTiaoJian.Rows[i]["ShuLiang"]);
                        int CangWeiID = Convert.ToInt32(dtTiaoJian.Rows[i]["CangWeiID"]);
                        int ChanPinID = Convert.ToInt32(dtTiaoJian.Rows[i]["ChanPinID"]);
                        myfrmXiaoShouKaiDan_Update.frmXiaoShouKaiDan_Update_btnBaoCun_DeleteXiaoShouDanMingXi(ChanPinID, CangWeiID, ShuLiang);//循环回滚库存数
                    }
                }
                MessageBox.Show("报废成功!", "提示!", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
                this.Dispose();
                this.Close();
            }
            else
            {
                MessageBox.Show("报废失败!", "提示!", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
            }
        }

注:此文章只供学习参考,禁止用于商业用途。







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值