钟表维修管理系统技术解析(四) 销售单录入中的录入数据
录入销售单这个模块,可以录入销售单,如果一个客户同时修多个表,有个再录一条按钮为同一个客户录入多条销售单,最后结账如(图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)所示
第一步:添加客户的单击事件
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)所示
第一步:查询品牌
(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)
第一步:录入产品按钮的单击事件,和自定义统计总金额方法
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)所 ...
- WCF医院管理系统技术解析(五)体检登记(四)
WCF医院管理系统技术解析(五)体检登记(四)涉及拼音简码 体检登记中的新增病人(需要注意的是:该病人不经过挂号和处方,只是到医院进行体检)与医院中的前台登记病人不同. 对于这种情况:我的思路是:该病 ...
- WCF医院管理系统技术解析(十)体检报告结果打印(水晶报表)
WCF医院管理系统技术解析(十)体检报告结果打印(水晶报表) 对于已经完成体检的病人,对其进行体检结果的打印,其体检结果报告打印效果如图: 界面涉及到的控件有: 控件 说明 从工具箱中找到对应的报表控 ...
- 海马汽车经销商管理系统技术解析(三)应收管理
海马汽车经销商管理系统技术解析(三)应收管理 应收管理这个模块可以查看所有欠款的客户和每个客户的欠款明细信息,还可以新建欠账单和删除欠账单.可以通过客户姓名.发生日期等条件对欠账单进行筛选查询.还可以 ...
- 北京络捷斯特第三方物流信息系统技术解析(四) 订单录入-运输订单
北京络捷斯特第三方物流信息系统技术解析(四) 订单录入-运输订单 2.1.3运输订单 运输订单有两个标签要编写,包括有订单信息和订单货品 订单信息界面截图: 2.1(图1) 订单货品信息截图: 2.1 ...
- WCF医院管理系统技术解析(十一)医生体检收入查询(带一定判断的导出Excel)
WCF医院管理系统技术解析(十一)医生体检收入查询(带一定判断的导出Excel) 医院支持对各个科室的体检收入,同时也可以查询到每个体检科室收入的审核医生.效果如图所示: 界面用到的控件有: 控件 说 ...
- WCF医院管理系统技术解析(七)体检登记(六)前台收费
WCF医院管理系统技术解析(七)体检登记(六)前台收费 设置好病人的体检项目后,病人就要到前台进行支付体检的相关费用,点击体检登记界面中的 前台收费中的界面效果如图所示: 2.9.8(图57) ...
最新文章
- 零基础 8 周掌握 Python,成为全能人才!
- 昨日关注-你说过的每一句话
- swoole mysql 协程_Swoole 协程 MySQL 客户端与异步回调 MySQL 客户端的对比
- 【正一专栏】从人民的名义看失败的婚姻关系
- CTFshow 反序列化 web270
- 【知识图谱系列】人工智能经典图谱有哪些?
- linux怎么杀死线程c语言,教程-linux下c语言编程 第一弹-线程的使用
- 【ZOJ - 2836 】Number Puzzle (容斥原理)
- Windows不同压缩软件、压缩算法、压缩率详细对比测试与选择
- VC2013同一个工程生成的exe文件显示不同的图标
- pci-e 无线网卡 linux,Fedora14 无线网卡(瑞昱 RTL8191SE Wireless LAN 802.11N PCI-E NIC)驱动安装...
- 几个项目管理的小故事
- 统计学之离散指标(全距、内距、异众比率、平均差与标准差)
- perf常用用法简介
- 浩辰CAD参考图剪辑编辑
- MFC、WTL、WPF、wxWidgets、Qt、GTK 对比
- KD树实现鸢尾花分类(Numpy实现)
- 【小飞象出海】Facebook海外企业广告账户如何申请基本流程
- 面试总结——商汤科技自动驾驶研究员
- js调用本地摄像头拍照截图,提交后台