可以做词云的网站,衡东网页设计,深圳个人形象设计,wordpress linux搭建前言 紧接上篇-基于C#开发web网页管理系统模板流程-主界面管理员录入和编辑功能完善-CSDN博客 本篇将完善主界面的管理员入库和出库功能#xff0c;同样的#xff0c;管理员入库和出库的设计套路适用于动态表的录入和编辑 首先还是介绍一下本项目将要实现的功能 #xf… 前言 紧接上篇-基于C#开发web网页管理系统模板流程-主界面管理员录入和编辑功能完善-CSDN博客 本篇将完善主界面的管理员入库和出库功能同样的管理员入库和出库的设计套路适用于动态表的录入和编辑 首先还是介绍一下本项目将要实现的功能 一入库界面 根据时间自动生成入库单号、根据入库数量和入库单价自动生成入库总价 完成基本的入库、查询、重置功能能够通过勾选CheckBox控件进行指定字段的条件查询 二出库界面 下拉选择货品后自动产生库存下图出库数量之后的红色数字根据时间自动生成出库单号、根据出库数量和销售单价自动生成销售总价输入出库数量时能判断库存是否足够 完成基本的入库、查询、重置功能能够通过勾选CheckBox控件进行指定字段的条件查询 注本篇开始不再会像前两篇那样事无巨细地介绍操作流程和配图出现过的类似操作都会一笔带过 一新建crkgl文件夹
crkgl即“出入库管理”的缩写
在admin文件下再新建一个crkgl文件夹以方便脚本管理我们将把实现出入库功能的脚本放在这个文件夹下以此类推当你实现菜单的其它选项的功能时也应采用这个思路 二设计入库界面
一添加设计工作台
创建一个【包含母版页的Web窗体】将其命名为rkgl.aspx
点击添加后再弹出的【选择母版页】窗口中选择唯一一个母版页Site.Master 二插入与调整表格
在刚刚新建的文件中点击右下角的【设计】在紫色窗口中键入几个回车方便操作 入库界面的表格的列数固定为3行数需要根据你自己管理系统需要查询的字段数来决定 行数入库表中的字段数2 例如在我的入库表中有7个字段因此设置该表为972行 三对表格进行自己喜欢的修饰并并添加相关提示信息
参考设计如图 四添加控件并配置控件
如下图共添加6个【TextBox】3个【Button】1个【DropDownList】这两类控件都在【工具箱】-【标准】中找到1个【GridView】这个控件在【工具箱】-【数据】中 【DropDownList】控件能够实现下拉直接选择数据库中已存在的货品号可以根据自己的具体需要使用此控件 1控件修饰
添加控件后对表格再次修饰将3个按钮依次改为入库、查询、重置 2控件属性配置 需要对一些控件的属性进行配置 ①一些固定的、用户已经输入的、在数据库中已存在的信息预期能够自动生成减少用户的二次输入因此直接将这类信息的文本框禁用。通过脚本自动导入例如入库单号通过时间自动生成、管理员号数据库中导入、入库总价通过入库数量*入库单价直接生成 ②对相关文本框能够接收的数据类型进行限制例如入库数量和入库单价设置为Number类型入库时间设置为Date类型 ③将入库数量和入库单价的【AutoPostBack】属性设置为True目的是为了能够“一旦入库数量或入库单价的信息被输入就自动调用该控件的相关脚本自动生成入库总价的信息” 五配置GridVeiw
1GridView数据源配置
详细教程见上篇标题【三.六】处内容-基于C#开发web网页管理系统模板流程-主界面管理员录入和编辑功能完善-CSDN博客
流程和之前的基本一致主要是以下两处注意修改——
①配置Select语句处注意修改成入库表 ②编写自定义SQL语句
入库表通常不编写Update修改语句实际使用中店员不应具备修改已入库记录的权限容易做假账即便能修改也涉及到修改日志、修改原因等信息的记录十分棘手因此只编写查询和删除语句 2配置删除功能
①启用分页和删除功能 将删除功能移至右端 将【CommandField】列设置为TemplateField模板列是必须进行的操作这关系到下文设置删除提示的操作 ②给删除功能添加确认删除提示
为避免用户误删记录必须给删除功能添加对应的确认提示
点击右下角的【源】在模板列的后台代码即绿色框起来的部分如果没有绿框内的代码说明你为进行上文将【CommandField】列设置为TemplateField模板列的操作中找到如下图红色下划线所在行的删除按钮后台代码添加如红色下划线所示的代码在【Text删除】的后面
OnClientClickreturn confirm(真的要删除吗) 六配置DropDownList
1DropDownList数据源配置
为货品号这个字段的下拉式菜单添加一个新的数据源流程和前面配置数据源时基本一致 到【配置Select语句】这个窗口时注意切换成货品表 自定义语句只需要一条查询语句此处的查询语句读者根据自己的管理系统来决定想要查询的内容
此处采用一种“货品号和货品名绑定显示”的查询机制因此使用了如下这条SQL语句
select hno, concat(hno, hname) as hpm from hpb 2功能预览 七为控件录入脚本以实现功能
零补充两个控件
需要为货品号和入库时间添加一组两个【CheckBox】控件以实现选中其中一个字段就按该字段进行条件查询不勾选就进行无条件查询如下图 控件所在位置如下 在需要勾选的字段之后添加这个控件 此时觉得它的名字有点碍眼分别去它们的属性中找到【Text】输入一个空格 这样只有选择框了顺眼很多 一所有控件脚本
已经是第三篇了不知道读者有没有注意到同一个.aspx文件中的所有控件的脚本是放在同一个.cs文件中的
打开【rkgl.aspx.cs】文件将下面的代码复制到该文件中即可实现所有控件的功能实现思路见代码注释
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data.Odbc; //ODBC命名空间namespace ckgl.admin.crkgl
{public partial class rkgl : System.Web.UI.Page{protected void Page_Load(object sender, EventArgs e){TextBox2.Text 100001;//测试用从入库管理脚本运行后直接录入这个管理员号}//TextBox3入库数量和TextBox4入库单价都不为空就根据它们的内容刷新TextBox5入库总价的内容protected void TextBox3_TextChanged(object sender, EventArgs e){if (TextBox3.Text ! TextBox4.Text ! ){TextBox5.Text (Convert.ToInt32(TextBox3.Text) * Convert.ToInt32(TextBox4.Text)).ToString();}}protected void TextBox4_TextChanged(object sender, EventArgs e){if (TextBox3.Text ! TextBox4.Text ! ){TextBox5.Text (Convert.ToInt32(TextBox3.Text) * Convert.ToInt32(TextBox4.Text)).ToString();}}protected void Button1_Click(object sender, EventArgs e){//录入按钮被点击时对数据进行合法性检测if (TextBox3.Text ){Response.Write(script languagejavascript alert(对不起入库数量不得位空);/script);return;}if (TextBox4.Text ){Response.Write(script languagejavascript alert(对不起入库单价不得位空);/script);return;}if (TextBox6.Text ){Response.Write(script languagejavascript alert(对不起入库时间不得位空);/script);return;}//根据本地时间年月日时分秒建议精确到秒这样做才会因为输入的先后单号不会出现相同的单号自动生成一个入库单号TextBox1.Text DateTime.Now.Year.ToString(); //取日期年TextBox1.Text DateTime.Now.Month.ToString();TextBox1.Text DateTime.Now.Day.ToString();TextBox1.Text DateTime.Now.Hour.ToString();TextBox1.Text DateTime.Now.Minute.ToString();TextBox1.Text DateTime.Now.Second.ToString();//链接数据库执行SQL语句OdbcConnection con DB.Lianjie();con.Open();string sql1 insert into rkb values( TextBox1.Text , TextBox2.Text , DropDownList1.Text ,;sql1 TextBox3.Text , TextBox4.Text , TextBox5.Text , TextBox6.Text ) ;OdbcCommand mycommand1 new OdbcCommand(sql1, con);mycommand1.ExecuteNonQuery();Response.Write(script languagejavascript alert(入库成功);/script);//成功执行即成功录入给出提示//入库成功后使用查询语句获取本地数据库新的记录按入库时间排序string sql2 select * from rkb order by rk_date desc;OdbcCommand mycommand2 new OdbcCommand(sql2, con);OdbcDataReader sdr mycommand2.ExecuteReader();if (sdr.Read()){SqlDataSource1.SelectCommand sql2;//将查询到的新记录显示GridView1.DataBind();}con.Close();}protected void Button2_Click(object sender, EventArgs e){//根据勾选的字段来决定查询结果OdbcConnection con DB.Lianjie();con.Open();string sql select * from rkb where ;if (CheckBox1.Checked true)sql hno DropDownList1.Text and ;if (CheckBox2.Checked true)sql rk_date TextBox6.Text and ;sql 11 ;//用于吞掉末尾的原sql语句的and关键字OdbcCommand mycommand new OdbcCommand(sql, con);OdbcDataReader sdr mycommand.ExecuteReader();if (sdr.Read()){SqlDataSource1.SelectCommand sql;GridView1.DataBind();}else{Response.Write(script languagejavascript alert(对不起没有查到数据);/script);return;}con.Close();}protected void Button3_Click(object sender, EventArgs e){//将可输入的字段置空就是重置了TextBox3.Text ;TextBox4.Text ;TextBox6.Text ;}}
} 三设计出库界面 出库界面的设计和入库界面基本雷同了碍于篇幅和蒟蒻博主的精力接下来就不详细说明了但只要你弄明白了入库界面出库界面一定不在话下 一添加设计工作台 二插入与调整表格
依旧是固定列数3行数入库表中的字段数2下图是用于参考的出库表 三对表格进行自己喜欢的修饰并并添加相关提示信息
四添加控件并配置控件
1添加控件
控件总览图—— 控件清单—— 6个TextBox出库单号、管理员号、出库数量、销售单价、销售总价、出库日期 1个DropDownList货品号 2个CheckBox货品号、出库日期 1个GridView置于表格右方 1个Label置于出库数量后方 Label标签的作用是将来通过脚本自动显示剩余的库存以提示用户不要超库存出库 2控件配置
未说明的保留默认设置 出库单号之后的TextBox1、管理员号之后的TextBox2、销售单价之后的TextBox4、销售总价之后的TextBox5 出库日期之后的TextBox6 货品号、出库日期之后的CheckBox1、CheckBox2 Text属性中输入一个空格 出库数量之后的Label 不需要空格删除默认文本即可 改颜色增加区分度 货品号之后的DropDownList1、出库数量之后的TextBox3 这个属性的目的是一旦控件的文本被修改就自动响应脚本使出库数量之后的Label能够实时显示出剩余库存 对货品号之后的DropDownList以及表格右方的GridView进行数据源配置在设计入库界面时已经详细讲解过 1GridView配置注意点 自定义SQL语句 编辑列将删除转换为模板列 在【源】中添加删除确认代码 OnClientClickreturn confirm(真的要删除吗) 2DropDownList配置注意点 自定义SQL语句 显示数据字段设置 五为控件录入脚本以实现功能
打开【ckgl.aspx.cs】文件将下面的代码复制到该文件中即可实现所有控件的功能实现思路见代码注释
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data.Odbc; //ODBC命名空间
using System.Collections.Specialized;namespace ckgl.admin.crkgl
{public partial class ckgl : System.Web.UI.Page{protected void Page_Load(object sender, EventArgs e){TextBox2.Text 100001;//测试用从入库管理脚本运行后直接录入这个管理员号}protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e){OdbcConnection con DB.Lianjie();con.Open();//一大段代码用来计算入库数量和出库数量库存 入库数量 - 出库数量string sql1 select IFNULL(price,0) as xsj from hpb where hno DropDownList1.Text ; //查货品销售价string sql2 select IFNULL(sum(rk_num),0) as rksl from rkb where hno DropDownList1.Text ; //查入库数量 string sql3 select IFNULL(sum(ck_num),0) as cksl from ckb where hno DropDownList1.Text ; //查出库数量 OdbcCommand mycommand1 new OdbcCommand(sql1, con);OdbcCommand mycommand2 new OdbcCommand(sql2, con);OdbcCommand mycommand3 new OdbcCommand(sql3, con);OdbcDataReader sdr1 mycommand1.ExecuteReader();OdbcDataReader sdr2 mycommand2.ExecuteReader();OdbcDataReader sdr3 mycommand3.ExecuteReader();if (sdr1.Read())TextBox4.Text sdr1[xsj].ToString();int rksl 0, cksl 0, kcsl;if (sdr2.Read())rksl Convert.ToInt32(sdr2[rksl]);if (sdr3.Read())cksl Convert.ToInt32(sdr3[cksl]);kcsl rksl - cksl;Label1.Text kcsl.ToString();//将剩余库存用Label显示出来}protected void TextBox3_TextChanged(object sender, EventArgs e){if (Label1.Text ! (Int32.Parse(TextBox3.Text) Int32.Parse(Label1.Text)))//检测剩余库存是否满足出库数量{Response.Write(script languagejavascript alert(对不起出库数量超过库存数量了);/script);return;}if (TextBox3.Text ! TextBox4.Text ! ){TextBox5.Text (Convert.ToInt32(TextBox3.Text) * Convert.ToInt32(TextBox4.Text)).ToString();}}protected void Button1_Click(object sender, EventArgs e)//入库{if (TextBox3.Text ){Response.Write(script languagejavascript alert(对不起出库数量不得位空);/script);return;}if (TextBox6.Text ){Response.Write(script languagejavascript alert(对不起出库时间不得位空);/script);return;}TextBox1.Text DateTime.Now.Year.ToString(); //取日期年TextBox1.Text DateTime.Now.Month.ToString();TextBox1.Text DateTime.Now.Day.ToString();TextBox1.Text DateTime.Now.Hour.ToString();TextBox1.Text DateTime.Now.Minute.ToString();TextBox1.Text DateTime.Now.Second.ToString();OdbcConnection con DB.Lianjie();con.Open();string sql1 insert into ckb values( TextBox1.Text , DropDownList1.Text ,;sql1 TextBox2.Text , TextBox3.Text , TextBox4.Text , TextBox5.Text , TextBox6.Text );OdbcCommand mycommand1 new OdbcCommand(sql1, con);mycommand1.ExecuteNonQuery();Response.Write(script languagejavascript alert(出库成功);/script);string sql2 select * from ckb order by ck_date desc;OdbcCommand mycommand2 new OdbcCommand(sql2, con);OdbcDataReader sdr mycommand2.ExecuteReader();if (sdr.Read()){SqlDataSource1.SelectCommand sql2;GridView1.DataBind();}con.Close();}protected void Button2_Click(object sender, EventArgs e)//查询{OdbcConnection con DB.Lianjie();con.Open();string sql select * from ckb where ;if (CheckBox1.Checked true)//按货品号查询sql hno DropDownList1.Text and ;if (CheckBox2.Checked true)//按出库日期查询sql ck_date TextBox6.Text and ;sql 11;//吞掉一个and保证sql语法正确OdbcCommand mycommand new OdbcCommand(sql, con);OdbcDataReader sdr mycommand.ExecuteReader();if (sdr.Read()){SqlDataSource1.SelectCommand sql;GridView1.DataBind();}else{Response.Write(script languagejavascript alert(对不起没有查到数据空);/script);return;}con.Close();}protected void Button3_Click(object sender, EventArgs e){TextBox3.Text ;//将相关控件置空和false即重置TextBox6.Text ;CheckBox1.Checked false;CheckBox2.Checked false;}}
} 四添加菜单
在母版页【Site.Master】中添加相应的出入库菜单 修改对应的【NavigateUrl】属性链接到对应的出入库界面