录入销售单这个模块,可以录入销售单,如果一个客户同时修多个表,有个再录一条按钮为同一个客户录入多条销售单,最后结账如(图1)所示。

(图1)

从界面上可以看到我们这里用到的控件有

控件名称

说明

日期控件(DateTimePicker)

控件可以在工具箱直接拖动至窗体,拖至窗体后右击属性可以修改控件的样式和各种属性,还可以编辑事件。

下拉框(ComboBox)

文本(TextBox)

按钮(Button)

数据表格(DataGridView)

数据库表与关系如(图2)所示:


表1:  销售单表(pw_XiaoShouDan)

列名

数据类型

主键/外键

说明

XiaoShouDanID

int

主键

销售单ID

LuRuYuanID

int

外键

员工表,员工ID

XiaoShouMenDianID

int

外键

备用

FuKuanZhuangTaiID

int

外键

属性明细表,付款状态ID

KeHuID

int

外键

客户表,客户ID

PinPaiID

int

外键

品牌表,品牌ID

ZhongBiaoKuanShiID

int

外键

属性明细表,钟表款式ID

XiaoShouLeiXingID

int

外键

属性明细表,销售类型ID

XiaoShouFangShiID

int

外键

属性明细表,销售方式ID

SongHuoFangShiID

int

外键

属性明细表,送货方式ID

FuKuanFangShiID

int

外键

属性明细表,付款方式ID

FuKuanLeiXingID

int

外键

属性明细表,付款类型ID

XiaoShouDanBianHao

nchar(50)

销售单自动编号

JieZhangBianHao

nchar(50)

结账单自动编号

DiKeHao

nchar(50)

底壳号

XiaoShouRiQi

date

销售日期

YingShouJinE

decimal(18, 4)

应收金额

ShiShouJinE

decimal(18, 4)

实收金额

GengXinShiJian

datetime

更新时间

BeiZhu

nchar(100)

备注

BaoFeiYuanYin

nchar(100)

报废时填写报废原因

YouXiaoFou

bit

有效否

表2:  销售单明细表(pw_XiaoShouDanMingXi)

列名

数据类型

主键/外键

说明

XiaoShouDanMingXiID

int

主键

销售单明细ID

XiaoShouDanID

int

外键

销售单表,销售单ID

ChanPinID

int

外键

产品表,产品ID

CangWeiID

int

外键

仓位表,仓位ID

(产品提取处)

BaoXiuQiID

int

外键

保修期表,保修期ID

DanJia

decimal(18, 4)

产品销售单价

ShuLiang

int

产品数量

YiTuiHuoShu

int

已退货数(默认为0)

YouXiaoFou

bit

有效否

GengXinShiJian

datetime

更新时间

BeiZhu

nchar(50)

备注

表3:库存表(sys_KuCun)

列名

数据类型

主键/外键

说明

KuCunID

int

主键

库存ID

LuRuYuanID

int

外键

录入员ID

CangWeiID

int

外键

仓位ID

ChanPinID

int

外键

产品ID

KuCunShuLiang

int

库存数量

GengXinShiJian

datetime

更新时间

表4:产品资料表(pw_ChanPinZiLiao)

列名

数据类型

主键/外键

说明

ChanPinID

int

主键

产品ID

LuRuYuanID

int

外键

录入员ID

CangKuLeiXingID

int

外键

仓库类型ID

ChanPinLeiXingID

int

外键

产品类型ID

ChanPinZhongLeiID

int

外键

产品种类ID

ChanPinPinPaiID

int

外键

产品品牌ID

DanWeiID

int

外键

单位ID

ChanPinBianHao

nchar(10)

产品编号

ChanPinMingCheng

nchar(10)

产品名称

CaiGouDanJia

decimal(18, 2)

采购单价

YiJiXiaoShouJia

decimal(18, 2)

销售价

JianJie

nchar(50)

简介

GengXinShiJian

datetime

更新时间

YouXiaoFou

bit

有效否

表5:仓位表(pw_CangWei)

列名

数据类型

主键/外键

说明

CangWeiID

int

主键

仓位ID

MenDianID

int

外键

门店ID

CangWeiLeiXingID

int

外键

仓位类型ID

CangWeiMingCheng

nchar(50)

仓位名称

PaiXuHao

int

排序号

GengXinShiJian

datetime

更新时间

YouXiaoFou

bit

有效否

BeiZhu

nchar(50)

备注

表6:出入库表(pw_ChuRuKuDanJu)

列名

数据类型

主键/外键

说明

ChuRuKuDanID

int

主键

出入库单据ID

LuRuYuanID

int

外键

录入员ID

DanJuBianHao

nchar(10)

单据编号

DanJuRiQi

date

单据日期

ShenHeFou

bit

审核否

BeiZhu

nchar(50)

备注

RuKuFou

bit

入库否

YouXiaoFou

bit

有效否

表7:出入库明细表(pw_ChuRuKuDanJuMingXi)

列名

数据类型

主键/外键

说明

ChuRuKuDanMingXiID

int

主键

出入库明细ID

ChuRuKuDanJuID

int

外键

出入库单据ID

ChanPinID

int

外键

产品ID

CangWeiID

int

外键

仓位ID

ShuLiang

int

外键

数量

JinE

decimal(18, 2)

金额

YouXiaoFou

bit

有效否

表8:员工表(sys_YuanGong)

列名

数据类型

主键/外键

说明

YuanGongID

int

主键

员工ID

LuRuYuanID

int

外键

录入员ID

YuanGongZhuangTaiID

int

外键

员工状态ID

MenDianID

int

外键

门店ID

ZhiWuID

Int

外键

职务

JueSeID

int

外键

角色ID

YuanGongBianHao

nchar(50)

员工编号

YuanGongXingMing

nchar(50)

员工姓名

XingBie

nchar(50)

性别

JiGuan

nchar(50)

籍贯

XueLi

nchar(50)

学历

ChuShengRiQi

date

出生日期

ShenFenZhengHao

nchar(18)

身份证号

RuZhiRiQi

data

入职日期

RuZhiDiDian

nchar(50)

入职地点

YiDongShouJi

int

移动手机

JiaTingDianHua

nchar(50)

家庭电话

DiXin

decimal(18, 2)

底薪

JiShiFou

bit

技术否

HunFou

bit

婚否

TongXunDiZhi

nchar(50)

通讯地址

BeiZhu

nchar(50)

备注

MiMa

nchar(50)

密码

表9:品牌表(sys_PinPai)

列名

数据类型

主键/外键

说明

PinPaiID

int

主键

品牌ID

LuRuYuanID

int

外键

录入员

PinPaiMingCheng

Nchar(10)

品牌名称

PaiXuHao

int

排序号

GengXinShiJian

decimal(18, 2)

更新时间

YouXiaoFou

Bit

有效否

BeiZhu

Nchar(50)

备注

表10:客户表(sys_KeHu)

列名

数据类型

主键/外键

说明

KeHuID

int

主键

客户ID

LuRuYuanID

int

外键

录入员ID

KeHuLeiXingID

int

外键

客户类型ID

SuoShuMenDianID

int

外键

所属门店ID

KeHuBianHao

decimal(18, 2)

客户编号

KeHuXingMing

Nchar(20)

客户姓名

XingBie

Nchar(10)

性别

ShenFenZhengHao

Nchar(18)

身份证号

YiDongShouJi

Nchar(13)

移动手机

JiaTingDianHua

Nchar(10)

家庭电话

ChuShenRiQi

Date

出生日期

TongXunDiZhi

Date

通讯地址

KeHuJiFen

Nchar(10)

客户积分

SuoShuDiFang

Nchar(10)

所属地方

QQHao

Int

QQ号

WeiXinHao

Nchar(10)

维修号

WeiBoHao

Nchar(10)

微博号

GenXinShiJian

datetime

更新时间

BeiZhi

Nchar(10)

备注

YouXiaoFou

Bit

有效否

表11:当日最大单号数表(DangRiZuiDaDanHaoShu)

列名

数据类型

主键/外键

说明

ZuiDaDanHaoShuID

int

主键

最大单号数ID

CaiGouDanHao

int

采购单号

CaiGouTuiHuoDanHao

int

采购退货单号

XiaoShouDanHao

int

销售单号

XiaoShouTuiHuoDanHao

int

销售退货单号

XiaoShouBaoXiuDanHao

int

销售保修单号

XiaoShouHuanHuoDanHao

int

销售换货单号

GongDanBianHao

int

工单编号

ChuKuDanHao

int

出库单号

RuKuDanHao

int

入库单号

JieZhangDanHao

int

结账单号

WaiPaiDanJuHao

int

外派单据号

QuBiaoFuKuanDanJuHao

int

取表付款单据号

FuKuanBianHao

int

付款单号

一、录入数据

1、绑定下拉框

第一步:存储过程

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

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

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

第三步:界面层(UIL)代码,窗体的Load事件

private void frmXiaoShouKaiDan_Insert_Load(object sender, EventArgs e){保修期.DataSource = myfrmXiaoShouKaiDan_Insert.frmXiaoShouKaiDan_Insert_Load_SelectTrueBaoXiuQi();//绑定数据源保修期.DisplayMember = "BaoXiuQiMingCheng";//绑定显示文本保修期.ValueMember = "BaoXiuQiID";//绑定IDcboKuanShi.DataSource = myfrmXiaoShouKaiDan_Insert.frmXiaoShouKaiDan_Insert_Load_SelectZhongBiaoKuanShi();//绑定数据源cboKuanShi.DisplayMember = "ShuXingMingXiMingCheng";//绑定显示文本cboKuanShi.ValueMember = "ShuXingMingXiID";//绑定IDcboXiaoShouLeiXing.DataSource = myfrmXiaoShouKaiDan_Insert.frmXiaoShouKaiDan_Insert_Load_SelectXiaoShouLeiXing();cboXiaoShouLeiXing.DisplayMember = "ShuXingMingXiMingCheng";cboXiaoShouLeiXing.ValueMember = "ShuXingMingXiID";dgvChanPinMingXi.AutoGenerateColumns = false;//设置DGV不能自动创建列dgvChanPinMingXi.AllowUserToAddRows = false;//设置DGV不能手动添加行txtXiaoShouDanBianHao.Text = "自动生成";//给销售单编号文本框赋值}

2、选择客户,界面如(图3)、(图4)所示


(图3)

(图4)

第一步:添加客户的单击事件

private void btnTianJiaKeHu_Click(object sender, EventArgs e){if (intGeShu > 0)//如果是按了[再录一条]按钮,则不能更换客户{MessageBox.Show("当前客户已绑定,如果不同客户请结账后再录入!", "提示!", MessageBoxButtons.OK, MessageBoxIcon.Error);return;}GongGongChuangTi.frmKeHu myfrmKeHu = new GongGongChuangTi.frmKeHu();//实例化选择客户窗体myfrmKeHu.ShowDialog();//弹出窗体if (GongGongChuangTi.frmKeHu.pubKeHuID != 0)//判断选择客户窗体是否按了关闭或者返回,如果是就不更改客户信息{intKeHuID = GongGongChuangTi.frmKeHu.pubKeHuID;//赋值语句,GongGongChuangTi.frmKeHu这个前缀是选择客户窗体的静态变量txtKeHuXingMing.Text = GongGongChuangTi.frmKeHu.pubKeHuXingMing;txtLianXiDianHua.Text = GongGongChuangTi.frmKeHu.pubLianXiDianHua;txtLianXiDiZhi.Text = GongGongChuangTi.frmKeHu.pubLianXiDiZhi;}}

第二步:选择客户的Load事件

public static int pubKeHuID = 0;
public static string pubKeHuXingMing = "";
public static string pubLianXiDianHua = "";
public static string pubLianXiDiZhi = "";
public static string pubKeHuLeiXing = "";private void frmKeHu_Load(object sender, EventArgs e){dgvKeHe.AllowUserToAddRows = false;//禁止手动添加行dgvKeHe.AutoGenerateColumns = false;//禁止自动添加列dgvKeHe.ReadOnly = true;//禁止编辑DGVcboYeDaXiao.Text = "20";//每页数量默认为20行pubKeHuID = 0;//一打开窗体就把客户信息清空,方便判断是否确定选择pubKeHuXingMing = "";pubLianXiDianHua = "";pubLianXiDiZhi = "";pubKeHuLeiXing = "";btnChaXun_Click(null, null);//调用查询方法}

第三步:客户的模糊查询、分页功能

(1)数据库的存储过程

CREATE PROCEDURE ShuJuBiaoGe_FenYeChaXun@tblName varchar(4000), -- 表名@strGetFields varchar(4000) = '*', -- 需要返回的列@fldName varchar(255)='''', -- 排序的字段名@PageSize int = 10, -- 页尺寸@PageIndex int = 1, -- 页码@doCount bit output, -- 返回记录总数, 非0 值则返回@OrderType bit = 0, -- 设置排序类型, 非0 值则降序@strWhere varchar(1500) = '''' -- 查询条件(注意: 不要加where)ASdeclare @strSQL varchar(5000) -- 主语句declare @strTmp varchar(110) -- 临时变量declare @temp varchar(100)--截取后的临时变量declare @strOrder varchar(400) -- 排序类型if @doCount != 0beginif @strWhere !=''''set @strSQL = 'select count(*) as Total from ' + @tblName + ' where '+@strWhereelseset @strSQL = 'select count(*) as Total from ' + @tblName + ''end
--以上代码的意思是如果@doCount传递过来的不是,就执行总数统计。以下的所有代码都是@doCount为的情况:elsebeginif @OrderType != 0--升序beginset @strTmp = '<(select min'set @strOrder = ' order by ' + @fldName +' desc'--如果@OrderType不是,就执行降序,这句很重要!endelsebeginset @strTmp = '>(select max'set @strOrder = ' order by ' + @fldName +' asc'endif @PageIndex = 1beginif @strWhere != '''' set @strSQL = 'select top ' + str(@PageSize) +' '+@strGetFields+ 'from ' + @tblName + ' where ' + @strWhere + ' ' + @strOrderelseset @strSQL = 'select top ' + str(@PageSize) +' '+@strGetFields+ ' from '+ @tblName + ' '+ @strOrder--如果是第一页就执行以上代码,这样会加快执行速度endelsebegin--以下代码赋予了@strSQL以真正执行的SQL代码set @temp=(select SUBSTRING(@fldName,charindex('.',@fldName,1)+1,len(@fldName)) )set @strSQL = 'select top ' + str(@PageSize) +' '+@strGetFields+ ' from '+ @tblName + ' where ' + @fldName + '' + @strTmp + '(tblTmp.'+ @temp + ') from (select top ' + str((@PageIndex-1)*@PageSize) + ' '+ @fldName + ' from ' + @tblName + '' + @strOrder + ') as tblTmp)'+ @strOrderif @strWhere != ''''set @strSQL = 'select top ' + str(@PageSize) +' '+@strGetFields+ ' from '+ @tblName + ' where ' + @fldName + '' + @strTmp + '(tblTmp.'+ @temp + ') from (select top ' + str((@PageIndex-1)*@PageSize) + ' '+ @fldName + ' from ' + @tblName + ' where ' + @strWhere + ' '+ @strOrder + ') as tblTmp) and ' + @strWhere + ' ' + @strOrderend end print @strSQL
exec (@strSQL)

(2)逻辑层(BLL)代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.Sql;
using System.Data.SqlClient;namespace BLL
{public class BLLGongGongFenYe{DALPublic.DALMethod myDALMethod = new DALPublic.DALMethod();public DataTable frmXiaoShouDan_select_TongYongFenYe(string strTblName, string strGetFields,string strFldName, int intPageSize, int intPageIndex,bool blDoCount, bool blOrderType, string strWhere){SqlParameter[] mySqlParameters = {new SqlParameter("@tblName",SqlDbType.VarChar,4000 ),new SqlParameter("@strGetFields",SqlDbType.VarChar,4000 ),new SqlParameter("@fldName",SqlDbType.VarChar,255 ),new SqlParameter("@PageSize",SqlDbType.Int ),new SqlParameter("@PageIndex",SqlDbType.Int ),new SqlParameter("@doCount",SqlDbType.Bit ),new SqlParameter("@OrderType",SqlDbType.Bit ),new SqlParameter("@strWhere",SqlDbType.VarChar,1500 ),};mySqlParameters[0].Value = strTblName;mySqlParameters[1].Value = strGetFields;mySqlParameters[2].Value = strFldName;mySqlParameters[3].Value = intPageSize;mySqlParameters[4].Value = intPageIndex;mySqlParameters[5].Value = blDoCount;mySqlParameters[6].Value = blOrderType;mySqlParameters[7].Value = strWhere;DataTable dt = myDALMethod.QueryDataTable("ShuJuBiaoGe_FenYeChaXun", mySqlParameters);return dt;}}
}

(3)界面层(UIL)代码

#region 查询所需有的字段decimal decYueShu;  //页数#endregion#region 数据库查询需要的参数,表名,字段名,排序字段,每页的大小,查询第几页,是否查询总记录数(true只查询总记录数,false查询表数据),排序类型(true倒序,false 升序),where条件string strTblName = "  sys_KeHu INNER JOIN sys_KeHuLeiXing ON sys_KeHu.KeHuLeiXingID = sys_KeHuLeiXing.KeHuLeiXingID";string strGetFields = "  sys_KeHu.KeHuID, RTRIM(sys_KeHu.KeHuBianHao) AS KeHuBianHao, RTRIM(sys_KeHu.KeHuXingMing) AS KeHuXingMing, RTRIM(sys_KeHu.XingBie) AS XingBie,"+ " RTRIM(sys_KeHu.YiDongShouJi) AS YiDongShouJi, RTRIM(sys_KeHu.JiaTingDianHua) AS JiaTingDianHua, RTRIM(sys_KeHu.DianZiYouXiang) AS DianZiYouXiang,"+ " RTRIM(sys_KeHu.ShenFenZhengHao) AS ShenFenZhengHao, sys_KeHu.ChuShenRiQi, RTRIM(sys_KeHu.TongXunDiZhi) AS TongXunDiZhi,"+" RTRIM(sys_KeHu.BeiZhi) AS BeiZhi,sys_KeHu.GenXinShiJian, RTRIM(sys_KeHuLeiXing.KeHuLeiXing) as KeHuLeiXing, sys_KeHu.KeHuLeiXingID";string strFldName = "sys_KeHu.KeHuID";//排序的字段名int intPageSize = 20;//页尺寸int intPageIndex = 1;//页码string strWhere;   //查询条件 (注意: 不要加 where)   #endregionBLL.BLLGongGongFenYe myBLLGongGongFenYe = new BLL.BLLGongGongFenYe();#region 查询/// <param name="intXianShiHang">每页显示的行数</param>/// <param name="intDangQianYeShu">当前页数</param>/// <param name="bolChaXingZhongShu"></param>/// <param name="bolDaoXu">如果是true就是倒序</param>/// <returns></returns>DataTable ChaXunShuJu(int intXianShiHang, int intDangQianYueShu, bool bolChaXingZhongShu, bool bolDaoXu){strWhere = "sys_KeHu.YouXiaoFou=1";//初始化查询条件if (txtChaXunNeiRong.Text != "")//判断文本框有没有输入内容{strWhere += " and (sys_KeHu.KeHuXingMing like '%'+'" + txtChaXunNeiRong.Text.Trim() + "'+'%' or sys_KeHu.KeHuBianHao like '%'+'" + txtChaXunNeiRong.Text.Trim() + "'+'%'" +" or sys_KeHu.XingBie like '%'+'" + txtChaXunNeiRong.Text.Trim() + "'+'%')";//累加模糊查询内容}decYueShu = Convert.ToDecimal(myBLLGongGongFenYe.frmXiaoShouDan_select_TongYongFenYe(strTblName, strGetFields, strFldName, intPageSize, intPageIndex, true, true, strWhere).Rows[0][0]);//获取查询结果的行数if (decYueShu / intXianShiHang <= Convert.ToInt32(decYueShu / intXianShiHang))//判断有多少页{decYueShu = Convert.ToInt32(decYueShu / intXianShiHang);}else{decYueShu = Convert.ToInt32(decYueShu / intXianShiHang) + 1;}if (intDangQianYueShu > decYueShu)//如果当前页数大于最大页数,则重新复制为最大页数{intPageIndex = (int)decYueShu;intDangQianYueShu = (int)decYueShu;}if (intPageIndex == 0 || intDangQianYueShu == 0)//如果当前页数为0,则重新赋值为1{intPageIndex = 1;intDangQianYueShu = 1;}lblZhongShu.Text = "/" + decYueShu.ToString();txtDangQianYeShu.Text = intDangQianYueShu.ToString();return myBLLGongGongFenYe.frmXiaoShouDan_select_TongYongFenYe(strTblName, strGetFields, strFldName, intXianShiHang, intDangQianYueShu, bolChaXingZhongShu, bolDaoXu, strWhere);//返回查询出来的结果}#endregion

(4)查询按钮的单击事件

private void btnChaXun_Click(object sender, EventArgs e){intPageIndex = 1;//默认为第一页dgvKeHe.DataSource = ChaXunShuJu(intPageSize, intPageIndex, false, true);//查询数据,且赋值给DGV}

(5)首页按钮的单击事件

private void btnShouYe_Click(object sender, EventArgs e){intPageIndex = 1;//跳到第一页dgvKeHe.DataSource = ChaXunShuJu(intPageSize, intPageIndex, false, true);}

(6)上一页按钮的单击事件

private void btnShangYiYe_Click(object sender, EventArgs e){if (intPageIndex <= 1)//如果已经是第一页,则返回(跳出){return;}intPageIndex--;//页数减一dgvKeHe.DataSource = ChaXunShuJu(intPageSize, intPageIndex, false, true);}

(7)下一页按钮的单击事件

private void btnXiaYiYe_Click(object sender, EventArgs e){if (intPageIndex >= decYueShu)//如果是最后一页,则返回(跳出){return;}intPageIndex++;//页数加一dgvKeHe.DataSource = ChaXunShuJu(intPageSize, intPageIndex, false, true);}

(8)首页按钮的单击事件

private void btnWeiYe_Click(object sender, EventArgs e){intPageIndex = Convert.ToInt32(decYueShu);//把最大页数赋值给当前页数dgvKeHe.DataSource = ChaXunShuJu(intPageSize, intPageIndex, false, true);}

(9)跳转按钮的单击事件

private void btnTiaoZhuan_Click(object sender, EventArgs e){if (txtTiaoZhuanYeShu.Text == "")//如果跳转页数文本框为空,则返回{ return; }if (Convert.ToInt32(txtTiaoZhuanYeShu.Text) > Convert.ToInt32(decYueShu) || Convert.ToInt32(txtTiaoZhuanYeShu.Text) < 1)//判断页数是否在范围内{MessageBox.Show("输入的页数不在范围之内", "提示"); return;}intPageIndex = Convert.ToInt32(txtTiaoZhuanYeShu.Text);//把跳转页数文本框的值转化成整形,并赋值给当前页数dgvKeHe.DataSource = ChaXunShuJu(intPageSize, intPageIndex, false, true);}

(10)页大小下拉框的下拉框关闭事件

private void cboYeDaXiao_DropDownClosed(object sender, EventArgs e){try{intPageSize = Convert.ToInt32(cboYeDaXiao.Text);//设置每页显示的行数dgvKeHe.DataSource = ChaXunShuJu(intPageSize, intPageIndex, false, true);}catch { }}

第四步:完成选择

(1)DGV的双击事件

private void dgvKeHe_CellMouseDoubleClick(object sender, DataGridViewCellMouseEventArgs e){try{pubKeHuID = Convert.ToInt32(dgvKeHe.CurrentRow.Cells["客户ID"].Value.ToString());pubKeHuXingMing = dgvKeHe.CurrentRow.Cells["客户姓名"].Value.ToString().Trim();pubLianXiDianHua = dgvKeHe.CurrentRow.Cells["移动手机"].Value.ToString().Trim();pubLianXiDiZhi = dgvKeHe.CurrentRow.Cells["家庭地址"].Value.ToString().Trim();pubKeHuLeiXing = dgvKeHe.CurrentRow.Cells["客户类型"].Value.ToString().Trim();this.Dispose();//释放窗体的资源this.Close();//关闭窗体}catch { }}

(2)确定按钮的单击事件

private void btnQueDing_Click(object sender, EventArgs e){if (dgvKeHe.Rows.Count > 0){pubKeHuID = Convert.ToInt32(dgvKeHe.CurrentRow.Cells["客户ID"].Value.ToString());pubKeHuXingMing = dgvKeHe.CurrentRow.Cells["客户姓名"].Value.ToString().Trim();pubLianXiDianHua = dgvKeHe.CurrentRow.Cells["移动手机"].Value.ToString().Trim();pubLianXiDiZhi = dgvKeHe.CurrentRow.Cells["家庭地址"].Value.ToString().Trim();pubKeHuLeiXing = dgvKeHe.CurrentRow.Cells["客户类型"].Value.ToString().Trim();this.Dispose();//释放窗体的资源this.Close();//关闭窗体}else{MessageBox.Show("当前表格没有数据,请查询!");}}

3、选择品牌如(图5)、(图6)所示


(图5)

(图6)

第一步:查询品牌

(1)数据库存储过程,参考选择客户

(2)逻辑层代码,参考选择客户

(3)界面层代码

public static int pubPinPaiID = 0;
public static string pubPinPaiMingCheng = "";
#region 查询所需有的字段decimal decYueShu;  //页数#endregion#region 数据库查询需要的参数,表名,字段名,排序字段,每页的大小,查询第几页,where条件string strTblName = "sys_PinPai";string strGetFields = "rtrim(PinPaiMingCheng) as PinPaiMingCheng, PinPaiID, GengXinShiJian, rtrim(PaiXuHao) as PaiXuHao";string strFldName = "sys_PinPai.PinPaiID";//排序的字段名int intPageSize = 20;//页尺寸int intPageIndex = 1;//页码string strWhere;   //查询条件 (注意: 不要加 where)   #endregionBLL.BLLGongGongFenYe myBLLGongGongFenYe = new BLL.BLLGongGongFenYe();#region 查询DataTable ChaXunShuJu(int intXianShiHang, int intDangQianYueShu, bool bolChaXingZhongShu, bool bolDaoXu){strWhere = "";strWhere += "sys_PinPai.YouXiaoFou=1";if (txtChaXunNeiRong.Text != ""){strWhere += " and (PinPaiMingCheng like '%'+'" + txtChaXunNeiRong.Text.Trim() + "'+'%' or PaiXuHao like '%'+'" + txtChaXunNeiRong.Text.Trim() + "'+'%')";}decYueShu = Convert.ToDecimal(myBLLGongGongFenYe.frmXiaoShouDan_select_TongYongFenYe(strTblName, strGetFields, strFldName, intPageSize, intPageIndex, true, true, strWhere).Rows[0][0]);if (decYueShu / intXianShiHang <= Convert.ToInt32(decYueShu / intXianShiHang)){decYueShu = Convert.ToInt32(decYueShu / intXianShiHang);}else{decYueShu = Convert.ToInt32(decYueShu / intXianShiHang) + 1;}if (intDangQianYueShu > decYueShu){intPageIndex = (int)decYueShu;intDangQianYueShu = (int)decYueShu;}if (intPageIndex == 0 || intDangQianYueShu == 0){intPageIndex = 1;intDangQianYueShu = 1;}lblZhongShu.Text = "/" + decYueShu.ToString();txtDangQianYeShu.Text = intDangQianYueShu.ToString();return myBLLGongGongFenYe.frmXiaoShouDan_select_TongYongFenYe(strTblName, strGetFields, strFldName, intXianShiHang, intDangQianYueShu, bolChaXingZhongShu, bolDaoXu, strWhere);}#endregion

窗体的Load事件

private void frmPinPai_Load(object sender, EventArgs e){pubPinPaiID = 0;cboYeDaXiao.Text = "20";dgvPinPai.AllowUserToAddRows = false;dgvPinPai.AutoGenerateColumns = false;btnChaXun_Click(null, null);}

查询按钮的单击事件

private void btnChaXun_Click(object sender, EventArgs e){intPageIndex = 1;dgvPinPai.DataSource = ChaXunShuJu(intPageSize, intPageIndex, false, true);}

第二步:完成选择

DGV的双击事件

private void dgvPinPai_CellMouseDoubleClick(object sender, DataGridViewCellMouseEventArgs e){try{pubPinPaiID = Convert.ToInt32(dgvPinPai.CurrentRow.Cells["品牌ID"].Value);pubPinPaiMingCheng = dgvPinPai.CurrentRow.Cells["品牌名称"].Value.ToString().Trim();this.Dispose();this.Close();}catch{ }}

确定按钮的单击事件

private void btnQueDing_Click(object sender, EventArgs e){if (dgvPinPai.Rows.Count > 0){pubPinPaiID = Convert.ToInt32(dgvPinPai.CurrentRow.Cells["品牌ID"].Value);pubPinPaiMingCheng = dgvPinPai.CurrentRow.Cells["品牌名称"].Value.ToString().Trim();this.Dispose();this.Close();}else{MessageBox.Show("当前没有可操作的数据,请查询!");}}

4、选择产品,界面如(图7)、(图8)所示

(图7)

(图8)

第一步:录入产品按钮的单击事件,和自定义统计总金额方法

private void btnLuRuChanPin_Click(object sender, EventArgs e){GongGongChuangTi.frmChanPin.dtChanPin.Rows.Clear();//清空选择产品窗体中dtChanPin的行if (dgvChanPinMingXi.Rows.Count > 0 && GongGongChuangTi.frmChanPin.dtChanPin.Columns.Count > 0){for (int i = 0; i < dgvChanPinMingXi.Rows.Count; i++){GongGongChuangTi.frmChanPin.dtChanPin.Rows.Add(1);//把DGV中已经存在的产品添加到,选择产品窗体的dtChanPin中GongGongChuangTi.frmChanPin.dtChanPin.Rows[i]["产品ID"] = dgvChanPinMingXi.Rows[i].Cells["产品ID"].Value.ToString().Trim();GongGongChuangTi.frmChanPin.dtChanPin.Rows[i]["名称"] = dgvChanPinMingXi.Rows[i].Cells["名称"].Value.ToString().Trim();GongGongChuangTi.frmChanPin.dtChanPin.Rows[i]["品牌"] = dgvChanPinMingXi.Rows[i].Cells["品牌"].Value.ToString().Trim();GongGongChuangTi.frmChanPin.dtChanPin.Rows[i]["编号"] = dgvChanPinMingXi.Rows[i].Cells["编号"].Value.ToString().Trim();GongGongChuangTi.frmChanPin.dtChanPin.Rows[i]["品种"] = dgvChanPinMingXi.Rows[i].Cells["品种"].Value.ToString().Trim();GongGongChuangTi.frmChanPin.dtChanPin.Rows[i]["销售价格"] = dgvChanPinMingXi.Rows[i].Cells["销售价格"].Value.ToString().Trim();GongGongChuangTi.frmChanPin.dtChanPin.Rows[i]["销售数量"] = dgvChanPinMingXi.Rows[i].Cells["销售数量"].Value.ToString().Trim();GongGongChuangTi.frmChanPin.dtChanPin.Rows[i]["小计"] = dgvChanPinMingXi.Rows[i].Cells["小计"].Value.ToString().Trim();GongGongChuangTi.frmChanPin.dtChanPin.Rows[i]["所在仓位ID"] = dgvChanPinMingXi.Rows[i].Cells["所在仓位ID"].Value.ToString().Trim();GongGongChuangTi.frmChanPin.dtChanPin.Rows[i]["所在仓位"] = dgvChanPinMingXi.Rows[i].Cells["所在仓位"].Value.ToString().Trim();GongGongChuangTi.frmChanPin.dtChanPin.Rows[i]["库存数"] = dgvChanPinMingXi.Rows[i].Cells["库存数"].Value.ToString().Trim();try{GongGongChuangTi.frmChanPin.dtChanPin.Rows[i]["保修期"] = dgvChanPinMingXi.Rows[i].Cells["保修期"].Value.ToString().Trim();}catch { }}}GongGongChuangTi.frmChanPin myfrmChanPin = new GongGongChuangTi.frmChanPin();//实例化选择产品窗体myfrmChanPin.ShowDialog();//弹出窗体。if (GongGongChuangTi.frmChanPin.pubQueDingFou)//判断是否确定选择{dgvChanPinMingXi.Rows.Clear();//清空DGVDataTable dtChanPin=GongGongChuangTi.frmChanPin.dtChanPin;for (int i = 0; i < GongGongChuangTi.frmChanPin.dtChanPin.Rows.Count; i++)//循环把选择到的产品,添加到DGV{dgvChanPinMingXi.Rows.Add(1);dgvChanPinMingXi.Rows[i].Cells["产品ID"].Value = dtChanPin.Rows[i]["产品ID"];dgvChanPinMingXi.Rows[i].Cells["名称"].Value = dtChanPin.Rows[i]["名称"];dgvChanPinMingXi.Rows[i].Cells["品牌"].Value = dtChanPin.Rows[i]["品牌"];dgvChanPinMingXi.Rows[i].Cells["编号"].Value = dtChanPin.Rows[i]["编号"];dgvChanPinMingXi.Rows[i].Cells["品种"].Value = dtChanPin.Rows[i]["品种"];dgvChanPinMingXi.Rows[i].Cells["销售价格"].Value = dtChanPin.Rows[i]["销售价格"];dgvChanPinMingXi.Rows[i].Cells["销售数量"].Value = dtChanPin.Rows[i]["销售数量"];dgvChanPinMingXi.Rows[i].Cells["小计"].Value = dtChanPin.Rows[i]["小计"];dgvChanPinMingXi.Rows[i].Cells["所在仓位ID"].Value = dtChanPin.Rows[i]["所在仓位ID"];dgvChanPinMingXi.Rows[i].Cells["所在仓位"].Value = dtChanPin.Rows[i]["所在仓位"];dgvChanPinMingXi.Rows[i].Cells["库存数"].Value = dtChanPin.Rows[i]["库存数"];try{dgvChanPinMingXi.Rows[i].Cells["保修期"].Value = Convert.ToInt32(dtChanPin.Rows[i]["保修期"]);}catch { }}JiSuanZongJinE();}}private void JiSuanZongJinE()//自定义的计算总价,和判断输入的方法{decimal decZongJinE = 0;//声明一个十进制数型变量for (int i = 0; i < dgvChanPinMingXi.Rows.Count; i++){decimal decJiaGe = 0;try{decJiaGe = Convert.ToDecimal(dgvChanPinMingXi.Rows[i].Cells["销售价格"].Value);//如果转换形态的时候出错,就是输入错误if (decJiaGe < 0){MessageBox.Show("第【" + (i + 1).ToString() + "】行,的【销售价格】不能小于零!");dgvChanPinMingXi.Rows[i].Cells["销售价格"].Value = 0;decJiaGe = 0;}}catch{MessageBox.Show("第【" + (i + 1).ToString() + "】行,的【销售价格】填写不正确!");dgvChanPinMingXi.Rows[i].Cells["销售价格"].Value = 0;decJiaGe = 0;}decimal decShuLiang = 0;try{decShuLiang = Convert.ToDecimal(dgvChanPinMingXi.Rows[i].Cells["销售数量"].Value);//如果转换形态的时候出错,就是输入错误if (decShuLiang < 1){MessageBox.Show("第【" + (i + 1).ToString() + "】行,的【销售数量】不能小于一!");dgvChanPinMingXi.Rows[i].Cells["销售数量"].Value = 1;decShuLiang = 1;}if (decShuLiang > Convert.ToDecimal(dgvChanPinMingXi.Rows[i].Cells["库存数"].Value)){MessageBox.Show("第【" + (i + 1).ToString() + "】行,的【销售数量】不能大于库存数!");dgvChanPinMingXi.Rows[i].Cells["销售数量"].Value = 1;decShuLiang = 1;}if (decShuLiang % 1 != 0){MessageBox.Show("第【" + (i + 1).ToString() + "】行,的【销售数量】不能为小数!");dgvChanPinMingXi.Rows[i].Cells["销售数量"].Value = 1;decShuLiang = 1;}}catch{MessageBox.Show("第【" + (i + 1).ToString() + "】行,的【销售数量】填写不正确!");dgvChanPinMingXi.Rows[i].Cells["销售数量"].Value = 1;decShuLiang = 1;}dgvChanPinMingXi.Rows[i].Cells["小计"].Value = decJiaGe * decShuLiang;decZongJinE += Convert.ToDecimal(dgvChanPinMingXi.Rows[i].Cells["小计"].Value);//累加每行的小计,也就是总金额}}

第二步:查询产品

(1)数据库存储过程,参考选择客户

(2)逻辑层代码,参考选择客户

(3)界面层代码

#region 查询产品需要的字段decimal decYueShu;int zongYeShu = 0;int intZongJiLuShu = 0;   //总记录数       private TabControl myTabControl = null;//选项卡int intPinZhong = 0;      //产品品种 System.Data.DataTable cbodataSource;  //绑定下拉框需要的数据源#endregion#region 数据库查询需要的参数,表名,字段名,排序字段,每页的大小,查询第几页,是否查询总记录数(true只查询总记录数,false查询表数据),排序类型(true倒序,false 升序),where条件//数据库查询时from关键字后面的语句string strTblName = " sys_ChanPinZiLiao INNER JOIN sys_PinPai ON sys_ChanPinZiLiao.ChanPinPinPaiID = sys_PinPai.PinPaiID INNER JOIN sys_ShuXingMingXi ON sys_ChanPinZiLiao.ChanPinLeiXingID = sys_ShuXingMingXi.ShuXingMingXiID INNER JOIN sys_ShuXingMingXi AS sys_ShuXingMingXi_1 ON sys_ChanPinZiLiao.DanWeiID = sys_ShuXingMingXi_1.ShuXingMingXiID INNER JOIN sys_PinZhong ON sys_ChanPinZiLiao.ChanPinZhongLeiID = sys_PinZhong.PinZhongID INNER JOIN sys_KuCun ON sys_ChanPinZiLiao.ChanPinID = sys_KuCun.ChanPinID INNER JOIN sys_CangWei ON sys_KuCun.CangWeiID = sys_CangWei.CangWeiID";string strGetFields = "sys_ChanPinZiLiao.ChanPinID, RTRIM(sys_ChanPinZiLiao.ChanPinMingCheng) AS ChanPinMingCheng, RTRIM(sys_ChanPinZiLiao.ChanPinBianHao) AS ChanPinBianHao,"+ "sys_ChanPinZiLiao.ChanPinLeiXingID, sys_ChanPinZiLiao.ChanPinZhongLeiID, sys_ChanPinZiLiao.ChanPinPinPaiID, RTRIM(sys_PinPai.PinPaiMingCheng) AS PinPaiMingCheng,"+ "RTRIM(sys_ChanPinZiLiao.CaiGouDanJia) AS CaiGouDanJia, RTRIM(sys_ChanPinZiLiao.YiJiXiaoShouJia) AS YiJiXiaoShouJia, RTRIM(sys_ChanPinZiLiao.GengXinShiJian) AS GengXinShiJian,"+ "sys_ChanPinZiLiao.DanWeiID, RTRIM(sys_ShuXingMingXi.ShuXingMingXiMingCheng) AS ChanPinLeiXing, RTRIM(sys_ShuXingMingXi_1.ShuXingMingXiMingCheng) AS DanWei,"+ "RTRIM(sys_PinZhong.PinZhongMingCheng) AS PinZhongMingCheng, sys_ChanPinZiLiao.ZuiDaKuCun, sys_ChanPinZiLiao.ZuiShaoKuCun, sys_ChanPinZiLiao.ChanPinBianHao AS Expr1,"+ "sys_ChanPinZiLiao.ChanPinMingCheng AS Expr2, sys_ChanPinZiLiao.CaiGouDanJia AS Expr3, sys_ChanPinZiLiao.YiJiXiaoShouJia AS Expr4, sys_ChanPinZiLiao.BaoXiuQiXian,"+ "sys_ChanPinZiLiao.JianJie, sys_ChanPinZiLiao.GengXinShiJian AS Expr5, sys_CangWei.CangWeiID, sys_KuCun.KuCunShuLiang, sys_CangWei.CangWeiMingCheng";string strFldName = " sys_ChanPinZiLiao.ChanPinID ";int intPageSize = 20;int intPageIndex = 1;string strWhere;#endregionBLL.BLLGongGongFenYe myBLLGongGongFenYe = new BLL.BLLGongGongFenYe();#region 查询DataTable ChaXunShuJu(int intXianShiHang, int intDangQianYueShu, bool bolChaXingZhongShu, bool bolDaoXu){strWhere = "";strWhere += "sys_ChanPinZiLiao.YouXiaoFou=1";if (Convert.ToInt32(cboChanPinLeiXing.SelectedValue)!= 0){strWhere += "and (sys_ChanPinZiLiao.ChanPinLeiXingID = '"+cboChanPinLeiXing.SelectedValue+"')";}if (Convert.ToInt32(cboCangWei.SelectedValue) != 0){strWhere += "and (sys_CangWei.CangWeiID = '" + cboCangWei.SelectedValue + "')";}if (txtChanPinMingCheng.Text != ""){strWhere += " and (sys_ChanPinZiLiao.ChanPinMingCheng like '%'+'" + txtChanPinMingCheng.Text.Trim() + "'+'%' or sys_ChanPinZiLiao.ChanPinBianHao like '%'+'" + txtChanPinMingCheng.Text.Trim() + "'+'%'" +" or sys_PinPai.PinPaiMingCheng like '%'+'" + txtChanPinMingCheng.Text.Trim() + "'+'%'or sys_PinZhong.PinZhongMingCheng like '%'+'"+txtChanPinMingCheng.Text.Trim()+"'+'%')";}decYueShu = Convert.ToDecimal(myBLLGongGongFenYe.frmXiaoShouDan_select_TongYongFenYe(strTblName, strGetFields, strFldName, intPageSize, intPageIndex, true, true, strWhere).Rows[0][0]);if (decYueShu / intXianShiHang <= Convert.ToInt32(decYueShu / intXianShiHang)){decYueShu = Convert.ToInt32(decYueShu / intXianShiHang);}else{decYueShu = Convert.ToInt32(decYueShu / intXianShiHang) + 1;}if (intDangQianYueShu > decYueShu){intPageIndex = (int)decYueShu;intDangQianYueShu = (int)decYueShu;}if (intPageIndex == 0 || intDangQianYueShu == 0){intPageIndex = 1;intDangQianYueShu = 1;}lblZhongShu.Text = "/" + decYueShu.ToString();txtDangQianYeShu.Text = intDangQianYueShu.ToString();return myBLLGongGongFenYe.frmXiaoShouDan_select_TongYongFenYe(strTblName, strGetFields, strFldName, intXianShiHang, intDangQianYueShu, bolChaXingZhongShu, bolDaoXu, strWhere);}#endregionBLL.BLL_CangKuGuanLi.frmChanPinZiLiao myfrmChanPinZiLiao = new BLL.BLL_CangKuGuanLi.frmChanPinZiLiao();public static DataTable dtChanPin=new DataTable();public static bool pubQueDingFou = false;public static int pubPinPaiID = 0;public static string pubPinPaiMingCheng = "";

(4)窗体的Load事件

private void frmChanPin_Load(object sender, EventArgs e){dgvChanPinZiLiao.AllowUserToAddRows = false;dgvChanPinZiLiao.AutoGenerateColumns = false;dgvChanPinZiLiao.ReadOnly = true;DataTable dataSource = myfrmChanPinZiLiao.frmChanPinZiLiao_Insert_Load_SelectQuanBuChanPinLeiXing();dataSource.Rows.Add("0", "全部");//添加行,0是"ChanPinLeiXingID",全部是"ChanPinLeiXingMingCheng"cboChanPinLeiXing.DataSource = dataSource;cboChanPinLeiXing.DisplayMember = "ChanPinLeiXingMingCheng";cboChanPinLeiXing.ValueMember = "ChanPinLeiXingID";cboChanPinLeiXing.SelectedValue = 0;DataTable dataSource1 = myfrmChanPinZiLiao.frmChanPinZiLiao_Insert_Load_SelectQuanBuCangWei();dataSource1.Rows.Add("全部", "0");cboCangWei.DataSource = dataSource1;cboCangWei.DisplayMember = "CangWeiMingCheng";cboCangWei.ValueMember = "CangWeiID";cboCangWei.SelectedIndex = 0;cboYeDaXiao.Text = "20";pubQueDingFou = false;//确定否,先复制为False,按了确定按钮,再改为Trueif (dtChanPin.Columns.Count < 1){dtChanPin.Columns.Add("产品ID", typeof(string));dtChanPin.Columns.Add("名称", typeof(string));dtChanPin.Columns.Add("品牌", typeof(string));dtChanPin.Columns.Add("编号", typeof(string));dtChanPin.Columns.Add("品种", typeof(string));dtChanPin.Columns.Add("销售价格", typeof(string));dtChanPin.Columns.Add("销售数量", typeof(string));dtChanPin.Columns.Add("小计", typeof(string));dtChanPin.Columns.Add("所在仓位ID", typeof(string));dtChanPin.Columns.Add("所在仓位", typeof(string));dtChanPin.Columns.Add("库存数", typeof(string));dtChanPin.Columns.Add("保修期", typeof(string));dtChanPin.Columns.Add("保修备注", typeof(string));}btnChaXun_Click(null, null); //调用查询按钮的单击事件}

(5)查询按钮的单击事件

private void btnChaXun_Click(object sender, EventArgs e){intPageIndex = 1;dgvChanPinZiLiao.DataSource = ChaXunShuJu(intPageSize, intPageIndex, false, true);for (int i = 0; i < dtChanPin.Rows.Count; i++){for (int j = 0; j < dgvChanPinZiLiao.Rows.Count; j++)//双重循环判断,已经在DGV存在的就默认打钩{if (Convert.ToInt32(dgvChanPinZiLiao.Rows[j].Cells["产品ID"].Value) == Convert.ToInt32(dtChanPin.Rows[i]["产品ID"]) &&Convert.ToInt32(dgvChanPinZiLiao.Rows[j].Cells["所在仓位ID"].Value) == Convert.ToInt32(dtChanPin.Rows[i]["所在仓位ID"])){dgvChanPinZiLiao.Rows[j].Cells["选择"].Value = true;break;}}}for (int i = 0; i < dtXiaoShouDanMingXi.Rows.Count; i++){for (int j = 0; j < dgvChanPinZiLiao.Rows.Count; j++)//双重循环判断,如果是修改销售单,打开的选择产品窗体,则把之前已经选择的产品库存数回滚{if (Convert.ToInt32(dtXiaoShouDanMingXi.Rows[i]["ChanPinID"]) == Convert.ToInt32(dgvChanPinZiLiao.Rows[j].Cells["产品ID"].Value) &&Convert.ToInt32(dtXiaoShouDanMingXi.Rows[i]["CangWeiID"]) == Convert.ToInt32(dgvChanPinZiLiao.Rows[j].Cells["所在仓位ID"].Value)){dgvChanPinZiLiao.Rows[j].Cells["库存数"].Value = Convert.ToDecimal(dgvChanPinZiLiao.Rows[j].Cells["库存数"].Value) + Convert.ToDecimal(dtXiaoShouDanMingXi.Rows[i]["ShuLiang"]);break;}}}}

(6)DGV的,在单元格上释放鼠标按钮时发生事件

private void dgvChanPinZiLiao_CellMouseUp(object sender, DataGridViewCellMouseEventArgs e){try{for (int i = 0; i < dgvChanPinZiLiao.SelectedRows.Count; i++){if (Convert.ToDecimal(dgvChanPinZiLiao.SelectedRows[i].Cells["库存数"].Value) <= 0)//判断有没有库存数{string strChanPinMingCheng = dgvChanPinZiLiao.SelectedRows[i].Cells["名称"].Value.ToString().Trim();string strCangKuMingCheng = dgvChanPinZiLiao.SelectedRows[i].Cells["所在仓位"].Value.ToString().Trim();MessageBox.Show("产品【"+strChanPinMingCheng+"】在仓位【"+strCangKuMingCheng+"】没有库存,不能进行选择!","提示!",MessageBoxButtons.OK,MessageBoxIcon.Asterisk);return;}if (Convert.ToBoolean(dgvChanPinZiLiao.SelectedRows[i].Cells["选择"].FormattedValue) == true)//判断是否已经选择{dgvChanPinZiLiao.SelectedRows[i].Cells["选择"].Value = false;//变为未选for (int intSuoYin = 0; intSuoYin < dtChanPin.Rows.Count; intSuoYin++){if (Convert.ToInt32(dgvChanPinZiLiao.SelectedRows[i].Cells["产品ID"].Value) == Convert.ToInt32(dtChanPin.Rows[intSuoYin]["产品ID"])&&Convert.ToInt32(dgvChanPinZiLiao.SelectedRows[i].Cells["所在仓位ID"].Value) == Convert.ToInt32(dtChanPin.Rows[intSuoYin]["所在仓位ID"])){dtChanPin.Rows.RemoveAt(intSuoYin);//移除选择的行break;}}}else//如果还没选择,则加上选的这一行{dgvChanPinZiLiao.SelectedRows[i].Cells["选择"].Value = true;//变为已选dtChanPin.Rows.Add(1);dtChanPin.Rows[dtChanPin.Rows.Count - 1]["产品ID"] = dgvChanPinZiLiao.SelectedRows[i].Cells["产品ID"].Value.ToString().Trim();dtChanPin.Rows[dtChanPin.Rows.Count - 1]["名称"] = dgvChanPinZiLiao.SelectedRows[i].Cells["名称"].Value.ToString().Trim();dtChanPin.Rows[dtChanPin.Rows.Count - 1]["品牌"] = dgvChanPinZiLiao.SelectedRows[i].Cells["品牌"].Value.ToString().Trim();dtChanPin.Rows[dtChanPin.Rows.Count - 1]["编号"] = dgvChanPinZiLiao.SelectedRows[i].Cells["编号"].Value.ToString().Trim();dtChanPin.Rows[dtChanPin.Rows.Count - 1]["品种"] = dgvChanPinZiLiao.SelectedRows[i].Cells["品种"].Value.ToString().Trim();dtChanPin.Rows[dtChanPin.Rows.Count - 1]["销售价格"] = "0";dtChanPin.Rows[dtChanPin.Rows.Count - 1]["销售数量"] = 1;dtChanPin.Rows[dtChanPin.Rows.Count - 1]["小计"] = "0";dtChanPin.Rows[dtChanPin.Rows.Count - 1]["所在仓位ID"] = dgvChanPinZiLiao.SelectedRows[i].Cells["所在仓位ID"].Value.ToString().Trim();dtChanPin.Rows[dtChanPin.Rows.Count - 1]["所在仓位"] = dgvChanPinZiLiao.SelectedRows[i].Cells["所在仓位"].Value.ToString().Trim();dtChanPin.Rows[dtChanPin.Rows.Count - 1]["库存数"] = dgvChanPinZiLiao.SelectedRows[i].Cells["库存数"].Value.ToString().Trim();}}DataTable dt = dtChanPin;}catch { }}

(7)确定按钮

private void btnQueDing_Click(object sender, EventArgs e){pubQueDingFou = true;this.Dispose();this.Close();}

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

钟表维修管理系统技术解析(四) 销售单录入中的录入数据相关推荐

  1. 钟表维修管理系统技术解析 维修记录(五)

    维修记录模块 维修记录就是记录钟表的维修内容和所使用的配件,使用配件时会生成出库记录,记录库存的数量变化.如果单据维修完成,也可以执行完成维修的操作. 实现思路:       当点击维修记录时跳转到维 ...

  2. 钟表维修管理系统技术解析 工单派工(三)

    工单派工模块 工单派工是对工单进行维修师傅分配的操作,就是指定某条工单由某个师傅负责维修,派工可以进行修改(更换维修师傅),每一次派工都会生成派工记录.新的单据选择维修师傅后单据的颜色会变成墨绿色,保 ...

  3. 海马汽车经销商管理系统技术解析(二)维修收银

    海马汽车经销商管理系统技术解析(二)维修收银 维修收银这个模块可以查看已经结算和已经收款的工单.可以通过工单号.车主姓名等条件对工单进行筛选查询.还可以对工单进行收银.刷新操作. 主界面如图(图1)所 ...

  4. WCF医院管理系统技术解析(五)体检登记(四)

    WCF医院管理系统技术解析(五)体检登记(四)涉及拼音简码 体检登记中的新增病人(需要注意的是:该病人不经过挂号和处方,只是到医院进行体检)与医院中的前台登记病人不同. 对于这种情况:我的思路是:该病 ...

  5. WCF医院管理系统技术解析(十)体检报告结果打印(水晶报表)

    WCF医院管理系统技术解析(十)体检报告结果打印(水晶报表) 对于已经完成体检的病人,对其进行体检结果的打印,其体检结果报告打印效果如图: 界面涉及到的控件有: 控件 说明 从工具箱中找到对应的报表控 ...

  6. 海马汽车经销商管理系统技术解析(三)应收管理

    海马汽车经销商管理系统技术解析(三)应收管理 应收管理这个模块可以查看所有欠款的客户和每个客户的欠款明细信息,还可以新建欠账单和删除欠账单.可以通过客户姓名.发生日期等条件对欠账单进行筛选查询.还可以 ...

  7. 北京络捷斯特第三方物流信息系统技术解析(四) 订单录入-运输订单

    北京络捷斯特第三方物流信息系统技术解析(四) 订单录入-运输订单 2.1.3运输订单 运输订单有两个标签要编写,包括有订单信息和订单货品 订单信息界面截图: 2.1(图1) 订单货品信息截图: 2.1 ...

  8. WCF医院管理系统技术解析(十一)医生体检收入查询(带一定判断的导出Excel)

    WCF医院管理系统技术解析(十一)医生体检收入查询(带一定判断的导出Excel) 医院支持对各个科室的体检收入,同时也可以查询到每个体检科室收入的审核医生.效果如图所示: 界面用到的控件有: 控件 说 ...

  9. WCF医院管理系统技术解析(七)体检登记(六)前台收费

    WCF医院管理系统技术解析(七)体检登记(六)前台收费 设置好病人的体检项目后,病人就要到前台进行支付体检的相关费用,点击体检登记界面中的    前台收费中的界面效果如图所示: 2.9.8(图57) ...

最新文章

  1. 零基础 8 周掌握 Python,成为全能人才!
  2. 昨日关注-你说过的每一句话
  3. swoole mysql 协程_Swoole 协程 MySQL 客户端与异步回调 MySQL 客户端的对比
  4. 【正一专栏】从人民的名义看失败的婚姻关系
  5. CTFshow 反序列化 web270
  6. 【知识图谱系列】人工智能经典图谱有哪些?
  7. linux怎么杀死线程c语言,教程-linux下c语言编程 第一弹-线程的使用
  8. 【ZOJ - 2836 】Number Puzzle (容斥原理)
  9. Windows不同压缩软件、压缩算法、压缩率详细对比测试与选择
  10. VC2013同一个工程生成的exe文件显示不同的图标
  11. pci-e 无线网卡 linux,Fedora14 无线网卡(瑞昱 RTL8191SE Wireless LAN 802.11N PCI-E NIC)驱动安装...
  12. 几个项目管理的小故事
  13. 统计学之离散指标(全距、内距、异众比率、平均差与标准差)
  14. perf常用用法简介
  15. 浩辰CAD参考图剪辑编辑
  16. MFC、WTL、WPF、wxWidgets、Qt、GTK 对比
  17. KD树实现鸢尾花分类(Numpy实现)
  18. 【小飞象出海】Facebook海外企业广告账户如何申请基本流程
  19. 面试总结——商汤科技自动驾驶研究员
  20. js调用本地摄像头拍照截图,提交后台

热门文章

  1. 集成运算放大器线性应用的基本电路以及输出电压与输出电压的关系
  2. 动规之-分组背包问题
  3. 自动配音软件哪个好?
  4. 2021CSP比赛小结
  5. 【点云上采样】三维点云特征上采样
  6. 极速高清——给你带来全新的高清视野
  7. android studio 网络定位城市名称
  8. 云计算学习笔记——第一章 云计算介绍
  9. php fping,fping - wangshaohui的个人页面 - OSCHINA - 中文开源技术交流社区
  10. 深入浅出图解CNN-卷积神经网络