Как стереть только ОДНУ строчку из DataGridView и базы данных SQLite при нажатии кнопки? - PullRequest
0 голосов
/ 11 июня 2018

Я работаю над приложением для ресторана, состоящим из двух форм: Form1 и Form2.

В Form2 есть пара текстовых полей, DataGridView и кнопка «Добавить продукт».

При нажатии кнопки «Добавить продукт» данные, введенные в текстовые поля выше, «перемещаются» в dataGridView, и появляется новый динамический столбец с кнопкой «стирания» для каждой строки.Если пользователь нажимает кнопку «Стереть», строка удаляется из dataGridView.

То, что я пытаюсь сделать, это стереть эту информацию строки из моей базы данных тоже.С кодом, который я публикую, я получаю, чтобы стереть эту строку, но я также стираю некоторые другие с теми же характеристиками, которые я не хочу.

Это атрибуты класса:

    double precio = 0;
    double cantidad = 0;
    double subtotal = 0;
    double total = 0;

    // THIS CODE ADDS A NEW ROW TO THE DATAGRIDVIEW AND TO THE DATABASE
private void btnAgregarItem_Click(object sender, EventArgs e)
    {
        Pagos.Rows.Add(txtID.Text, txtNombre.Text, txtPrecio.Text, txtCantidad.Text, etiquetaSubTotalNum.Text);

            int id_producto = Convert.ToInt32(txtID.Text.ToString());
            string nombre = txtNombre.Text.ToString();
            double precio = Convert.ToDouble(txtPrecio.Text.ToString());
            double cantidad = Convert.ToDouble(txtCantidad.Text.ToString());
            double subtotal = Convert.ToDouble(etiquetaSubTotalNum.Text.ToString());

            String consulta = "INSERT INTO Productos (id_producto, nombre, precio, cantidad, subtotal) VALUES(@id_producto, @nombre, @precio, @cantidad, @subtotal)";
            SQLiteCommand cmd = new SQLiteCommand(consulta, conexion);

            cmd.Parameters.Clear();
            cmd.Parameters.Add(new SQLiteParameter("@id_producto", id_producto));
            cmd.Parameters.Add(new SQLiteParameter("@nombre", nombre));
            cmd.Parameters.Add(new SQLiteParameter("@precio", precio));
            cmd.Parameters.Add(new SQLiteParameter("@cantidad", cantidad));
            cmd.Parameters.Add(new SQLiteParameter("@subtotal", subtotal));
            cmd.ExecuteNonQuery();

    }


      // THIS CODE ERASES THE CURRENT ROW FROM THE DATAGRIDVIEW, BUT IT´S POSSIBLE THAT IT ALSO ERASES MORE THAN ONE LINE FROM THE DATABASE 

private void Pagos_CellClick(object sender, DataGridViewCellEventArgs e)
    {
        if (this.Pagos.Columns[e.ColumnIndex].Name == "colBotones")
        {
            Pagos.Rows.RemoveAt(Pagos.CurrentRow.Index);

            int id_producto = Convert.ToInt32(txtID.Text.ToString());
            string nombre = txtNombre.Text.ToString();
            double precio = Convert.ToDouble(txtPrecio.Text.ToString());
            double cantidad = Convert.ToDouble(txtCantidad.Text.ToString());
            double subtotal = Convert.ToDouble(etiquetaSubTotalNum.Text.ToString());

            String consulta = "DELETE FROM Productos where id_producto = @id_producto and nombre = @nombre and precio = @precio and cantidad = @cantidad and subtotal =  @subtotal";
            SQLiteCommand cmd = new SQLiteCommand(consulta, conexion);

            cmd.Parameters.Clear();
            cmd.Parameters.Add(new SQLiteParameter("@id_producto", id_producto));
            cmd.Parameters.Add(new SQLiteParameter("@nombre", nombre));
            cmd.Parameters.Add(new SQLiteParameter("@precio", precio));
            cmd.Parameters.Add(new SQLiteParameter("@cantidad", cantidad));
            cmd.Parameters.Add(new SQLiteParameter("@subtotal", subtotal));
            cmd.ExecuteNonQuery();
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...