C# 综合示例 库存管理系统16 出库单操作(FormStorageOutOrder)

版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的

图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;

            //通过OleDbCommandExecuteReader方法获得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 货物类别";

            //通过OleDbCommandExecuteReader方法获得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;

                //通过OleDbCommandExecuteReader方法获得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#教程 目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

.Net学习

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值