版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的
图99A-31 出库单操作窗口设计
由于出库单所包含的信息比入库单多得多,因此,代码难度主要在不遗漏项目。
全部代码如下:
//是否新增标志,如果是,设置为True;否则False
Boolean isAdd;
//传入的出库单ID号,也是判断新增还是修改的依据
int orderId;
OleDbConnection connection;
//修改出库清单中的物品时设置标记
Boolean isEditGoods = false;
struct GoodsType
{
public int TypeId;
public string TypeInfo;
}
List<int> arrExpress;
List<GoodsType> arrGoodsType;
//如果是修改原出库单
//键值对分别保存 货物ID和对应数量 ,需要在货物信息表(库存)中进行增删
//原出库单中的
Dictionary<int, int> dicGoodsInfoOld;
//修改后出库单中的
Dictionary<int, int> dicGoodsInfoNew;
//根据传入的订单号进行确认操作
//如果订单号为0,那么新增
//否则,修改
public FormStorageOutOrder(int OrderId)
{
InitializeComponent();
// 在 InitializeComponent() 调用之后添加任何初始化。
this.orderId = OrderId;
if (this.orderId == 0)
isAdd = true;
else
isAdd = false;
}
private void FormStorageOutOrder_Load(object sender, EventArgs e)
{
dtpOrder.Value = DateTime.Now;
dtpSend.Value = DateTime.Now;
arrExpress = new List<int>();
arrGoodsType = new List<GoodsType>();
dicGoodsInfoOld = new Dictionary<int, int>();
dicGoodsInfoNew = new Dictionary<int, int>();
connection = new OleDbConnection(classMod.databaseConnString);
//打开数据连接
connection.Open();
fillControls();
drawControls();
}
//填充数据选项,主要是 cbExpress 和 cbGoodsType
private void fillControls()
{
//新建OleDbCommand对象实例
OleDbCommand command = new OleDbCommand();
//=========填充快递公司选择框==================
//要执行的SQL查询
command.CommandText = "select * from 快递公司";
//设置OleDbCommand的数据连接为OleDbConnection
command.Connection = connection;
//声明OleDbDataReader对象
OleDbDataReader odReader;
//通过OleDbCommand的ExecuteReader方法获得OleDbDataReader对象实例。
odReader = command.ExecuteReader();
//如果OleDbDataReader中包含数据
if (odReader.HasRows)
{
//循环读取每一行数据,直到Read方法返回False
while (odReader.Read())
{
arrExpress.Add((int)odReader.GetValue(0));
cbExpress.Items.Add(odReader.GetValue(1));
}
}
odReader.Close();
//==========填充货物种类选择框===================
//要执行的SQL查询
command.CommandText = "select * from 货物类别";
//通过OleDbCommand的ExecuteReader方法获得OleDbDataReader对象实例。
odReader = command.ExecuteReader();
GoodsType gt;
//如果OleDbDataReader中包含数据
if (odReader.HasRows)
{
//循环读取每一行数据,直到Read方法返回False
while (odReader.Read())
{
gt.TypeId = (int)odReader.GetValue(0);
cbGoodsType.Items.Add(odReader.GetValue(1));
gt.TypeInfo = (string)odReader.GetValue(2);
arrGoodsType.Add(gt);
}
}
//关闭数据读取器
odReader.Close();
}
//向控件中填充数据
//如果是新增,那么保持控件原状
//如果是修改,那么需要读取数据库中的数据再填充
private void drawControls()
{
if (isAdd == true)
{
cbExpress.SelectedIndex = 0;
cbGoodsType.SelectedIndex = 0;
EnabledControls();
}
else
{
//如果是修改数据,那么填充所有控件中的数据
//新建OleDbCommand对象实例
OleDbCommand command = new OleDbCommand();
//=========填充lvGoodsType==================
//要执行的SQL查询
command.CommandText = "select 雇员ID,订购日期,发货日期,快递公司,快递费,快递单号,买家姓名,买家手机号码,买家地址 from 出库单 where 订单ID=" + orderId;
//设置OleDbCommand的数据连接为OleDbConnection
command.Connection = connection;
//声明OleDbDataReader对象
OleDbDataReader odReader;
//通过OleDbCommand的ExecuteReader方法获得OleDbDataReader对象实例。
odReader = command.ExecuteReader(CommandBehavior.SingleRow);
odReader.Read();
//省略了检查数据记录是否有效
txtName.Text = odReader.GetValue(6).ToString();
txtTel.Text = odReader.GetValue(7).ToString();
txtAddr.Text = odReader.GetValue(8).ToString();
dtpOrder.Value = (DateTime)odReader.GetValue(1);
dtpSend.Value = (DateTime)odReader.GetValue(2);
int express = (int)odReader.GetValue(3);
for (int i = 0; i < arrExpress.Count; i++)
{
if (express == arrExpress[i])
{
cbExpress.SelectedIndex = i;
break;
}
}
txtExpressPrice.Text = odReader.GetValue(4).ToString();
txtExpressID.Text = odReader.GetValue(5).ToString();
cbGoodsType.SelectedIndex = 0;
int recordUserID = (int)odReader.GetValue(0);
odReader.Close();
//=========填充 lvBuyInfo ==================
//要执行的SQL查询
command.CommandText = "SELECT 出库单明细.产品ID,货物信息.产品名称,出库单明细.单价,出库单明细.数量 " +
"FROM 货物信息 INNER JOIN 出库单明细 ON 货物信息.产品ID = 出库单明细.产品ID " +
"where 出库单明细.订单ID=" + orderId;
//设置OleDbCommand的数据连接为OleDbConnection
command.Connection = connection;
odReader = command.ExecuteReader();
ListViewItem lvItem;
//如果OleDbDataReader中包含数据
if (odReader.HasRows)
{
//循环读取每一行数据,直到Read方法返回False
while (odReader.Read())
{
lvItem = new ListViewItem(odReader.GetValue(0).ToString());
lvItem.SubItems.Add(odReader.GetValue(1).ToString());
lvItem.SubItems.Add(odReader.GetValue(2).ToString());
lvItem.SubItems.Add(odReader.GetValue(3).ToString());
lvBuyInfo.Items.Add(lvItem);
dicGoodsInfoOld.Add(odReader.GetInt32(0), odReader.GetInt16(3));
}
}
odReader.Close();
UnabledControls();
if (recordUserID != classMod.loginId)
{
btnSave.Enabled = false;
btnEdit.Enabled = false;
}
}
}
学习更多vb.net知识,请参看vb.net 教程 目录
学习更多C#知识,请参看C#教程 目录