首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >POS计算小计

POS计算小计
EN

Stack Overflow用户
提问于 2016-05-21 08:21:11
回答 1查看 699关注 0票数 0

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

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

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

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

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

代码语言:javascript
复制
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;
    }
代码语言:javascript
复制
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();
    }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-05-21 08:29:47

我在您的quantity_change方法中看到了什么:

代码语言:javascript
复制
row.Cells["TotalPrice"].Value = quantity * rate;

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

您不需要计算整个订单的总价(数据网格中的所有产品),您需要对所有产品的所有小计进行求和。

例如,在quantity_Change的末尾:

代码语言:javascript
复制
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();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37360545

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档