【问题标题】:Compute Subtotal of POS计算 POS 小计
【发布时间】:2016-05-21 08:21:11
【问题描述】:

所以我正在创建一个项目,它是一个销售点,就像快餐连锁店中的那些。

我的 POS 上的按钮是动态创建的,取决于我的数据库中的值,现在当我更改每个项目的数量时,我很难计算小计。我使用 DataGrid 列出了客户订购的所有产品。

我创建了两个按钮 addminus 可以在 datagridview 中设置所选行的数量,我不确定我是否正确,但下面还提供了计算价格的代码所选项目的数量乘以数量。

我的问题是,每次我在数据网格中添加项目或添加或减去项目数量时,如何计算小计价格和数据网格视图中的项目总数。?每次我添加一个项目或添加或减去一个项目时,小计都应立即反映出来。

提供了一个示例图像,以更好地了解我希望在我的项目中发生什么。

public void quantity_change(object sender, EventArgs e)
    {
        var row = dataGridView1.CurrentRow;

        if (row == null || row.Index < 0)
            return;
        var unit = (sender == add) ? 1 : -1;

        var quantity = Convert.ToInt32(row.Cells["Quantity"].Value) + unit;

        row.Cells["Quantity"].Value = quantity;
        var rate = Convert.ToDouble(row.Cells["SellingPrice"].Value);
        row.Cells["TotalPrice"].Value = quantity * rate;
    }

private void frmPOS_Load(object sender, EventArgs e)
    {

        dataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect;

        add.Click += quantity_change;
        minus.Click += quantity_change;

        cmd = new MySqlCommand("SELECT * FROM tblmenu", dbConn);
        MySqlDataReader rdr = cmd.ExecuteReader();

        while (rdr.Read())
        {
            Button btn = new Button();
            btn.Text = rdr["menuName"].ToString();
            btn.Name = rdr["menuID"].ToString();
            btn.Width = 126;
            btn.Height = 80;

            btn.Click += delegate
            {
                dataGridView1.ClearSelection();

                MySqlConnection cnn2 = new MySqlConnection(sqlConn.connString);
                cnn2.Open();
                cmd = new MySqlCommand("SELECT menuName, menuPrice FROM tblmenu WHERE menuID = @id", cnn2);
                cmd.Parameters.AddWithValue("@id", btn.Name);
                MySqlDataReader rdr2 = cmd.ExecuteReader();

                while (rdr2.Read())
                {
                   //I added the item in my datagridview, with the button name, 1 = 1quantity, and Selling Price
                 dataGridView1.Rows.Add(rdr2.GetString("menuName").ToUpper(), 1, rdr2.GetDouble("menuPrice"));
                }

                //I copied the value of Selling Price Column to the Total Price Column in this part
                foreach (DataGridViewRow row in dataGridView1.Rows)
                {
                    value = row.Cells["SellingPrice"].Value.ToString();
                    row.Cells["TotalPrice"].Value = value;
                }
            };


            if (rdr["menuAvailability"].ToString() == "yes")
            {
                if (rdr["menuCategory"].ToString() == "Sandwiches")
                {
                    flpSandwiches.Controls.Add(btn);
                }
                else if (rdr["menuCategory"].ToString() == "Appetizers")
                {
                    flpAppetizers.Controls.Add(btn);
                }
            }               
        }

        rdr.Close();
    }

【问题讨论】:

    标签: c# datagridview datagrid


    【解决方案1】:

    我在你的 quantity_change 方法中可以看到:

    row.Cells["TotalPrice"].Value = quantity * rate;
    

    对我来说,这是给定产品的小计。

    您不想计算整个订单(数据网格中的所有产品)的总价,您需要将所有产品的所有小计相加。

    例如在quantity_Change的末尾:

    double Total=0;
    
    foreach (DataGridViewRow row in dataGridView1.Rows)
    {
        Total+=row.Cells["TotalPrice"].Value;
    }
    
    // now you can set this value for example label under data grid
    labelTotal.Text = Total.ToString();
    

    【讨论】:

    • 哇!这样可行。我只是将它创建为一个函数,这样即使在添加或删除项目时我也可以调用它!谢谢! :)
    猜你喜欢
    • 2017-05-31
    • 2021-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多