zoukankan      html  css  js  c++  java
  • 多个datagridview之间互相传值

     一个winform程序,有两个窗体,一个是住窗体,一个是子窗体。主窗体中有一个button按钮和一个datagridview控件。点击button按钮弹出子窗体,子窗体如图:

    这其中涉及到两张表,一张是生产产品的供应商信息表,一张是产品信息表。主窗体查询的是供应商信息表,子窗体左边的datagridview查询的是产品信息表。当点击中间的“=>”按钮是,把左边选中的产品添加到右边。如果左边的产品没有设置单价,则弹出一个小窗体让用户设置价格(左边datagridview隐藏了“单价”列)。并保存,在右边就要显示出来。右边也可以移除产品到左边。最后点击“确定”按钮时,右边datagridview中的数据都要保存到主窗体中的datagridview控件中。

    // <summary>
            /// 保存用户选择的产品。
            /// </summary>
            public List<UMS_BASE_出品信息视图> L { get; set; }
            public string SuppGuid { get; set; }

            /// <summary>
            /// 用户选中的产品。
            /// </summary>
            /// <param name="dt">DataTable对象</param>
            public delegate void DtProductInfo(DataTable dt);
            public DtProductInfo onProductInfo;

            /// <summary>
            /// 用来保存dgv_已选产品中的数据集。
            /// </summary>
            DataTable dt = new DataTable();
            UMS_BASE_分页出品信息表 list = new UMS_BASE_分页出品信息表();

            public FrmAddProduct()
            {
                InitializeComponent();
            }

            private void FrmAddProduct_Load(object sender, EventArgs e)
            {
                dgv_产品.AutoGenerateColumns = dgv_已选产品.AutoGenerateColumns = false;
                string strGuid = "";

                try
                {
                    //根据出品类别查询出品Guid。
                    strGuid = cmb_产品性质.Text == "" ? "" : RestService.SelectGoodsCategory(BaseInfo.Storeguid).Where(n => n.类别 == cmb_产品性质.Text.Trim()).FirstOrDefault().GUID.ToString();

                    //产品信息。
                    list = RestService.SelectProducedInformationList(BaseInfo.Storeguid, 1, 22, "编码", "asc", strGuid, txt_产品.Text.Trim());
                    if (list != null && list.总行数 > 0)
                    {
                        dgv_产品.DataSource = list.ums_出品信息视图;
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message, "系统提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                }

                dt.Columns.Add("品名", typeof(string));
                dt.Columns.Add("进货价", typeof(string));
                dt.Columns.Add("单价", typeof(string));
                dt.Columns.Add("GUID", typeof(string));
            }

            /// <summary>
            /// 根据产品名称或者编号查询产品信息。
            /// </summary>
            private void txt_产品_TextChanged(object sender, EventArgs e)
            {
                try
                {
                    //根据出品类别查询出品Guid。
                    string strGuid = cmb_产品性质.Text == "" ? "" : RestService.SelectGoodsCategory(BaseInfo.Storeguid).Where(n => n.类别 == cmb_产品性质.Text.Trim()).FirstOrDefault().GUID.ToString();

                    UMS_BASE_分页出品信息表 list = RestService.SelectProducedInformationList(BaseInfo.Storeguid, 1, 22, "编码", "desc", strGuid, txt_产品.Text.Trim());
                    dgv_产品.DataSource = list;
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message, "系统提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                }
            }

            private void btnChoose_Click(object sender, EventArgs e)
            {
                ChooseProduct();
            }

            /// <summary>
            /// 选择左边的产品添加到右边。
            /// </summary>
            private void ChooseProduct()
            {
                if (dgv_产品.SelectedRows.Count > 0)
                {
                    try
                    {
                        DataRow dr = dt.NewRow();
                        dr[0] = dgv_产品.Rows[dgv_产品.CurrentRow.Index].Cells[0].Value.ToString();
                        dr[1] = dgv_产品.Rows[dgv_产品.CurrentRow.Index].Cells[1].Value.ToString();
                        dr[2] = dgv_产品.Rows[dgv_产品.CurrentRow.Index].Cells[2].Value.ToString();
                        dr[3] = dgv_产品.Rows[dgv_产品.CurrentRow.Index].Cells[3].Value.ToString();
                        dt.Rows.Add(dr);

                        dgv_已选产品.DataSource = dt;
                        foreach (UMS_BASE_出品信息视图 ub in list.ums_出品信息视图)
                        foreach (UMS_BASE_出品信息视图 ub in list.ums_出品信息视图)
                        {
                            if (ub.品名 == dgv_产品.Rows[dgv_产品.CurrentRow.Index].Cells["品名"].Value.ToString())
                            {
                                string strGuid = "";

                                //如果价格为空,则让用户设置价格。
                                if (string.IsNullOrEmpty(dgv_产品.Rows[dgv_产品.CurrentRow.Index].Cells["零售价"].Value.ToString()))
                                {
                                    strGuid = dgv_产品.Rows[dgv_产品.CurrentRow.Index].Cells["GUID"].Value.ToString();
                                    FrmSetPrice frmSetprice = new FrmSetPrice();
                                    frmSetprice.ProGuid = strGuid;

                                    if (frmSetprice.ShowDialog() == DialogResult.OK)
                                    {
                                        dr[1] = dgv_产品.Rows[dgv_产品.CurrentRow.Index].Cells["零售价"].Value.ToString();
                                    }
                                }
                                break;
                            }
                        }

                       dgv_产品.DataSource = null;
                        dgv_产品.DataSource = list.ums_出品信息视图;
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show(ex.Message, "系统提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    }
                }
                else
                {
                    MessageBox.Show("请选择添加的产品!");
                }
            }

            private void dgv_产品_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
            {
                ChooseProduct();
            }

            private void dgv_已选产品_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
            {
                DeleteProduct();
            }

            private void btnDelete_Click(object sender, EventArgs e)
            {
                DeleteProduct();
            }

            /// <summary>
            /// 把右边的数据移除到左边。
            /// </summary>
            private void DeleteProduct()
            {
                if (dgv_已选产品.SelectedRows.Count > 0)
                {
                    try
                    {
                        dgv_已选产品.DataSource = dt;
                        UMS_BASE_出品信息视图 ub = new UMS_BASE_出品信息视图();
                        ub.品名 = dgv_已选产品.Rows[dgv_已选产品.CurrentRow.Index].Cells[0].Value.ToString();
                        list.ums_出品信息视图.Add(ub);
                        dgv_已选产品.Rows.Remove(dgv_已选产品.Rows[dgv_已选产品.CurrentRow.Index]);

                        dgv_产品.DataSource = null;
                        dgv_产品.DataSource = list.ums_出品信息视图;
                        dgv_产品.Refresh();
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show(ex.Message, "系统提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    }
                }
                else
                {
                    MessageBox.Show("请选择要移除的产品!");
                }
            }

            /// <summary>
            /// 把要保存的产品添加到UC_SupplierFiles中。
            /// </summary>
            private void btnOk_Click(object sender, EventArgs e)
            {
                UC_SuppliersToGoods uc = new UC_SuppliersToGoods();
                uc.Show();
                if (onProductInfo != null)
                {
                    onProductInfo(dt);
                }
                this.Close();
            }
        }
    }

    设置价格中的代码:

     private void FrmSetPrice_Load(object sender, EventArgs e)
            {
                UMS_BASE_出品信息视图 u = RestService.SelectProducedInformation(Guid.Parse(ProGuid));
                lbl_产品名称.Text = u.品名;
                lbl_产品类别.Text = u.类别名称;
            }

            /// <summary>
            /// 为产品设定价格。
            /// </summary>
            private void buttonX1_Click(object sender, EventArgs e)
            {
                UMS_Base_SuppliersGoodsInfo u = new UMS_Base_SuppliersGoodsInfo();
                u.F_Price = decimal.Parse(txt_价格.Text.Trim());

                try
                {
                    RestService.InsertSuppliersGoodsInfo(u);
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message, "系统提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                }

                this.DialogResult = DialogResult.OK;
            }

    代码中有一些问题,望各位指正。实现开始说的目的,也可以用其他的方法,在这里只是提供一个参考方法。

  • 相关阅读:
    U盘安装Ubuntu 14.04 LTS
    VS2013配置OPENCV2.4.9(OPENCV3.X)
    make、makefile、cmake、qmake对比
    Google C++ Style
    Ubuntu16.04搜狗输入法无法输入中文
    Ubuntu16.04安装使用wineqq
    Ubuntu卸载软件
    [机器学习入门篇]-梯度下降法
    [机器学习入门篇]-正则化
    2014年度最受好评的十佳工具
  • 原文地址:https://www.cnblogs.com/moss_tan_jun/p/2272750.html
Copyright © 2011-2022 走看看