如何在按钮单击事件后从数据库中删除已删除的datagridview项

时间:2016-03-20 20:34:23

标签: c# winforms datagridview

我的表单中有DataGridView并保存Button。我正在将已购买的商品从TextBoxes添加到DataGridView,然后点击保存Button后,它会保存到数据库。这是相同的代码 -

        foreach (DataGridViewRow row in dgvOrderList.Rows)
        {
            if ((bool)row.Cells[0].Value)
            {
                int productId = Convert.ToInt32(row.Cells["clmCode"].Value);
                int quantity = Convert.ToInt32(row.Cells["clmQty"].Value);
                int amount = Convert.ToInt32(row.Cells["clmAmount"].Value);

                if (_orderBLL.CreateOrderedProduct(productId, quantity, amount, orderId))
                {
                    status = true;
                    row.Cells[0].Value = false;
                }
                else
                    status = false;
            }
        }

我还有一个名为“删除”的Button用于删除已购买商品列表中的商品。这是相同的代码 -

            foreach (DataGridViewRow row in dgvOrderList.Rows)
            {
                if (row.Selected)
                {
                    dgvOrderList.Rows.RemoveAt(row.Index);
                    int div = Convert.ToInt32(row.Cells[5].Value);

                    total = total - div;
                    txtTotalAmount.Text = total.ToString();
                    if (!(bool)row.Cells[0].Value)
                    {
                        int productId = Convert.ToInt32(row.Cells[1].Value);
                        int orderId = Convert.ToInt32(txtOrderId.Text);
                        if(_orderBLL.IsOrderedProductExists(productId, orderId))
                        {
                            _orderBLL.DeleteOrderedProducts(productId, orderId);
                        }
                    }
                }
            }

但问题是,当我点击删除Button时,它会立即从DataGridView以及数据库中删除项目,而不是等待保存。

我的问题是,有没有办法只能点击删除DataGridViewButton删除项目,然后点击保存Button后从数据库中删除?

1 个答案:

答案 0 :(得分:1)

根据上述评论中的建议,以下是上述问题的解决方案。

删除Button中的更改。添加整数数组pids[]以存储将从DataGridView中删除的产品ID,然后在保存订单和从数据库中删除时检查相同的数据。

            foreach (DataGridViewRow row in dgvOrderList.Rows)
            {
                if (row.Selected)
                {
                    dgvOrderList.Rows.RemoveAt(row.Index);
                    //break; //use break if you only select one row! if selected more, then remove it!
                    pids[i] = Convert.ToInt32(row.Cells[1].Value);
                    i++;

                    int div = Convert.ToInt32(row.Cells[5].Value);

                    total = Convert.ToInt32(txtTotalAmount.Text);
                    total = total - div;
                    txtTotalAmount.Text = total.ToString();
                }
            }

在保存Button

中更新了以下代码
                foreach (int p in pids)
                {
                    if (p != 0)
                        _orderBLL.DeleteOrderedProducts(p, orderId);
                }