C# 综合示例 库存管理系统11 入库管理(FormStorageIn)

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

图99A-26入库管理窗口设计

由于存在一个入库单对应多个入库物的情况,因此提供了两种显示方式。“入库单”按钮按下显示的是入库单信息,“入库货物”按钮按下显示的是入库货物信息。datagridview在显示入库单时,双击弹出入库单ID对应的入库单操作窗口;datagridview在显示入库货物信息时,双击转到显示该入库货物对应的入库单。

全部代码如下:

        OleDbConnection connection;

        DataSet ds;

        OleDbDataAdapter adapter;

        //每页显示记录数

        const int pagesize = 50;

        //总的页数

        int maxPage;

        //当前页数

        int currentPage;

        FormMain F_Main;

        //入库单查询相关sql语句

        string sqlOrderSelect;

        string sqlOrderFrom;

        string sqlOrderOrder;

        string sqlOrderWhere;

        //入库货物查询相关sql语句

        string sqlFoodsSelect;

        string sqlFoodsFrom;   

        string sqlFoodsOrder;

        string sqlFoodsWhere;

        //以入库物自定义1查询相关语句

        string sqlQuerySelect;

        string sqlQueryFrom;

        string sqlQueryOrder;

        string sqlQueryWhere;

        //以入库单自定义2查询相关语句

        string sqlQueryOrderSelect;

        string sqlQueryOrderFrom;

        string sqlQueryOrderOrder;

        string sqlQueryOrderWhere;

        string sqlFlag;

        private void FormStorageIn_Load(object sender, EventArgs e)

        {

            WindowState = FormWindowState.Maximized;

            connection = new OleDbConnection(classMod.databaseConnString);

            connection.Open();

            F_Main = (FormMain)MdiParent;

            sqlOrderSelect = "SELECT 入库单.入库单ID, 操作员.姓名 as 操作员, 入库单.订购日期, 入库单.入库日期 ";

            sqlOrderFrom = "FROM 操作员 INNER JOIN 入库单 ON 操作员.ID = 入库单.操作员ID ";

            sqlOrderWhere = "where 入库单.是否删除=''";

            sqlOrderOrder = "order by 入库单.入库单ID";

            sqlFoodsSelect = "Select  入库单.入库单ID, 操作员.姓名 as 操作员, 货物信息.产品名称 as 货物, 入库单明细.单价, 入库单明细.数量, 货物信息.单位数量, 供应商.公司名称 as 供应商 ";

            sqlFoodsFrom = "From 操作员 INNER Join (((货物信息 INNER Join 供应商 On 货物信息.供应商ID = 供应商.供应商ID) INNER Join 入库单明细 On 货物信息.产品ID = 入库单明细.产品ID) INNER Join 入库单 On 入库单明细.入库单ID = 入库单.入库单ID) ON 操作员.ID = 入库单.操作员ID ";

            sqlFoodsWhere = "where 入库单.是否删除=''";

            sqlFoodsOrder = "order by 入库单明细.入库单ID";

            sqlQuerySelect = "Select  入库单.入库单ID, 操作员.姓名 as 操作员, 货物信息.产品名称 as 货物, 入库单明细.单价, 入库单明细.数量, 货物信息.单位数量, 供应商.公司名称 as 供应商 ";

            sqlQueryFrom = "From 操作员 INNER Join (((货物信息 INNER Join 供应商 On 货物信息.供应商ID = 供应商.供应商ID) INNER Join 入库单明细 On 货物信息.产品ID = 入库单明细.产品ID) INNER Join 入库单 On 入库单明细.入库单ID = 入库单.入库单ID) ON 操作员.ID = 入库单.操作员ID ";

            sqlQueryWhere = "";

            sqlQueryOrder = "order by 入库单明细.入库单ID";

            sqlQueryOrderSelect = "SELECT 入库单.入库单ID, 操作员.姓名 as 操作员, 入库单.订购日期, 入库单.入库日期 ";

            sqlQueryOrderFrom = "FROM 操作员 INNER JOIN 入库单 ON 操作员.ID = 入库单.操作员ID ";

            sqlQueryOrderOrder = "";

            sqlQueryOrderWhere = "order by 入库单.入库单ID";

            sqlFlag = "入库单";

            showGrid(sqlFlag);

        }

        private void tsbStockInOrder_Click(object sender, EventArgs e)

        {

            sqlFlag = "入库单";

            showGrid(sqlFlag);

            //在查询入库物品单时,才允许增改删

            tsbAdd.Enabled = true;

            tsbEdit.Enabled = true;

            tsbDelete.Enabled = true;

        }

        //显示查询的数据信息

        private void showGrid(string tableFlag)

        {

            ds = new DataSet(tableFlag);

            //建立OleDbCommand,传入Sql语句求要查询记录的总数

            OleDbCommand command = new OleDbCommand();

            string sqlSelect = "";

            string sqlFrom = "";

            string sqlWhere = "";

            string sqlOrder = "";

            switch (tableFlag)

            {

                case "入库单":

                    sqlSelect = sqlOrderSelect;

                    sqlFrom = sqlOrderFrom;

                    sqlWhere = sqlOrderWhere;

                    sqlOrder = sqlOrderOrder;

                    break;

                case "入库物":

                    sqlSelect = sqlFoodsSelect;

                    sqlFrom = sqlFoodsFrom;

                    sqlWhere = sqlFoodsWhere;

                    sqlOrder = sqlFoodsOrder;

                    break;

                case "自定义1":

                    sqlSelect = sqlQuerySelect;

                    sqlFrom = sqlQueryFrom;

                    sqlWhere = sqlQueryWhere;

                    sqlOrder = sqlQueryOrder;

                    break;

                case "自定义2":

                    sqlSelect = sqlQueryOrderSelect;

                    sqlFrom = sqlQueryOrderFrom;

                    sqlWhere = sqlQueryOrderWhere;

                    sqlOrder = sqlQueryOrderOrder;

                    break;

            }

            command.CommandText = "select count(*) " + sqlFrom + sqlWhere;

            command.Connection = connection;

            int count = (int)command.ExecuteScalar();

            F_Main.tsslInfo.Text = "数据总数:" + count + " ";

            if (count < pagesize)

            {

                tsbFirstPage.Enabled = false;

                tsbPrevPage.Enabled = false;

                tsbNextPage.Enabled = false;

                tsbLastPage.Enabled = false;

            }

            else

            {

                tsbFirstPage.Enabled = true;

                tsbPrevPage.Enabled = true;

                tsbNextPage.Enabled = true;

                tsbLastPage.Enabled = true;

            }

            command.CommandText = sqlSelect +

                            sqlFrom +

                            sqlWhere +

                            sqlOrder;

            adapter = new OleDbDataAdapter(command);

            Console.WriteLine(command.CommandText);

            //根据记录总数得到总的页数,其中Math.Ceiling返回大于或等于指定的数的最小整数值

            maxPage = (int)Math.Ceiling((double)count / pagesize);

            currentPage = 0;

            adapter.Fill(ds, currentPage * pagesize, pagesize, tableFlag);

            //防止列顺序与查询顺序不一致,需要加入以下一行代码

            dgv.DataSource = null;

            dgv.DataSource = ds.Tables[tableFlag];

            tslRecord.Text = (currentPage + 1).ToString() + "/" + maxPage.ToString();

        }

        private void tsbStockInFoods_Click(object sender, EventArgs e)

        {

            sqlFlag = "入库物";

            showGrid(sqlFlag);

            //在查询入库物品时,禁止增改删

            tsbAdd.Enabled = false;

            tsbEdit.Enabled = false;

            tsbDelete.Enabled = false;

        }

        private void tsbQuery_Click(object sender, EventArgs e)

        {

            FormStorageInQuery F_StorageInQuery = new FormStorageInQuery();

            F_StorageInQuery.Owner = this;

            F_StorageInQuery.ShowDialog();

            if (customWhere == "")

                return;

            sqlQueryWhere = "where " + customWhere + " and (入库单.是否删除='')";

            sqlFlag = "自定义1";

            showGrid(sqlFlag);

        }

       //第一页数据

        private void tsbFirstPage_Click(object sender, EventArgs e)

        {

            currentPage = 0;

            //先清除已经填入的表,否则会将数据追加到已有表

            ds.Tables[sqlFlag].Clear();

            adapter.Fill(ds, currentPage * pagesize, pagesize, sqlFlag);

            dgv.DataSource = ds.Tables[sqlFlag];

            tslRecord.Text = "1/" + maxPage.ToString();

        }

        //上一页数据

        private void tsbPrevPage_Click(object sender, EventArgs e)

        {

            if (currentPage == 0)

            {

                MessageBox.Show("已经是第一页了");

                return;

            }

            currentPage -= 1;

            ds.Tables[sqlFlag].Clear();

            adapter.Fill(ds, currentPage * pagesize, pagesize, sqlFlag);

            dgv.DataSource = ds.Tables[sqlFlag];

            tslRecord.Text = (currentPage + 1).ToString() + "//" + maxPage.ToString();

        }

        //下一页数据

        private void tsbNextPage_Click(object sender, EventArgs e)

        {

            if (currentPage == maxPage - 1)

            {

                MessageBox.Show("已经是最后一页了");

                return;

            }

            currentPage += 1;

            ds.Tables[sqlFlag].Clear();

            int recordcount = adapter.Fill(ds, currentPage * pagesize, pagesize, sqlFlag);

            dgv.DataSource = ds.Tables[sqlFlag];

            tslRecord.Text = (currentPage + 1).ToString() + "//" + maxPage.ToString();

        }

        //最后一页数据

        private void tsbLastPage_Click(object sender, EventArgs e)

        {

            currentPage = maxPage - 1;

            ds.Tables[sqlFlag].Clear();

            adapter.Fill(ds, currentPage * pagesize, pagesize, sqlFlag);

            dgv.DataSource = ds.Tables[sqlFlag];

            tslRecord.Text = (currentPage + 1).ToString() + "//" + maxPage.ToString();

        }

        //增加入库单

        private void tsbAdd_Click(object sender, EventArgs e)

        {

            FormStorageInOrder F_StorageInOrder = new FormStorageInOrder(0);

            F_StorageInOrder.ShowDialog();

        }

        //查看或修改入库单

        private void tsbEdit_Click(object sender, EventArgs e)

        {

            if (dgv.SelectedRows.Count == 0)

            {

                MessageBox.Show("请先选择一条入库单");

                return;

            }

            int orderid;

            orderid = (int)dgv.SelectedRows[0].Cells[0].Value;

            FormStorageInOrder F_StorageInOrder = new FormStorageInOrder(orderid);

            F_StorageInOrder.ShowDialog();

        }

        //删除入库单。。只能删除登录操作员本人的

        private void tsbDelete_Click(object sender, EventArgs e)

        {

            if (dgv.SelectedRows.Count == 0)

            {

                MessageBox.Show("请先选择一条入库单");

                return;

            }

            int orderid;

            orderid = (int)dgv.SelectedRows[0].Cells[0].Value;

            OleDbCommand command = new OleDbCommand();

            command.Connection = connection;

            //先查询该入库单记录是否当前操作员保存

            command.CommandText = "select 操作员ID from 入库单 where 入库单ID=" + orderid;

            OleDbDataReader odReader = command.ExecuteReader(CommandBehavior.SingleResult);

            odReader.Read();

            int recordUserID = odReader.GetInt32(0);

            if (recordUserID != classMod.loginId)

            {

                MessageBox.Show("不允许删除其它操作员的入库单");

                return;

            }

            odReader.Close();

            if (MessageBox.Show("确定要删除此条记录?", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning) == DialogResult.Cancel)

                return;

            //将该入库单标记为删除(实际未删除)

            command.CommandText = "update 入库单 set 是否删除=//// where 入库单ID=" + orderid;

            //删除不用返回值,直接使用ExecuteNonQuery

            command.ExecuteNonQuery();

            //dgv中删除该行

            dgv.Rows.Remove(dgv.SelectedRows[0]);

        }

        private void tsbHome_Click(object sender, EventArgs e)

        {

            Close();

        }

        private void FormStorageIn_FormClosing(object sender, FormClosingEventArgs e)

        {

            connection.Close();

        }

        //=====================================

        //dgv中双击某行

        private void dgv_MouseDoubleClick(object sender, MouseEventArgs e)

        {

            DataGridView.HitTestInfo dgvhti = dgv.HitTest(e.X, e.Y);

            int selectedIndex;

            if (dgvhti.Type == DataGridViewHitTestType.Cell || dgvhti.Type == DataGridViewHitTestType.RowHeader)

            {

                selectedIndex = dgvhti.RowIndex;

                int orderid = (int)dgv.Rows[selectedIndex].Cells[0].Value;

                if (sqlFlag == "入库物" || sqlFlag == "自定义1")

                {

                    //当在入库物 表格时,双击转到查询对应的订单

                    sqlQueryOrderWhere = "where (入库单.入库单ID=" + orderid + ") and (入库单.是否删除='')";

                    sqlFlag = "自定义2";

                    showGrid(sqlFlag);

                    //在查询入库单时,才允许增改删

                    tsbAdd.Enabled = true;

                    tsbEdit.Enabled = true;

                    tsbDelete.Enabled = true;

                }

                else

                {

                    //当在 入库单、自定义2 时,双击同选中某行后按下修改按钮的效果

                    FormStorageInOrder F_StorageInOrder = new FormStorageInOrder(orderid);

                    F_StorageInOrder.ShowDialog();

                }

            }

            else

            {

                return;

            }

        }

        //自定义查询,需要从FormStockOutQuery返回查询条件

        public string customWhere;

        //自定义查询

        private void tsbQuery_Click_1(object sender, EventArgs e)

        {

            FormStorageInQuery F_StorageInQuery = new FormStorageInQuery();

            F_StorageInQuery.Owner = this;

            F_StorageInQuery.ShowDialog();

            if (customWhere == "")

                return;

            sqlQueryWhere = "where " + customWhere + " and (入库单.是否删除='')";

            sqlFlag = "自定义1";

            showGrid(sqlFlag);

        }

学习更多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、付费专栏及课程。

余额充值