计算POS的小计

时间:2016-05-21 08:21:11

标签: c# datagridview datagrid

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

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

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

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

提供了一个示例图像,以便更好地了解我希望在项目中实现的目标。

LINK TO INTERFACE

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();
    }

1 个答案:

答案 0 :(得分:0)

我在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();