Как редактировать столбцы datagridview, который заполняется из базы данных?C # Windows формы - PullRequest
0 голосов
/ 21 февраля 2019

У меня есть приложение для выставления счетов с Windows Forms.У меня есть datagridview: Datagridview с столбцами

И когда я набираю номер в первый столбец (Tuotekoodi / код продукта на английском языке), например, на картинке я набрал номер 1 в первый столбец,а затем он автоматически заполняет столбцы «Nimike» и «Hinta» из базы данных.

Так что моя проблема в том, что я больше не могу редактировать столбцы «Nimike» или «Hinta».Я могу, но когда я перехожу к следующему столбцу, он читает те же значения обратно в столбцы.Итак, как я могу редактировать значения в столбцах «Nimike» и «Hinta» после того, как он считывает значения из базы данных в эти столбцы?

А вот мои коды, в которых есть событие cellValueChanged:

private void dataGridView1_CellValueChanged(object sender, DataGridViewCellEventArgs e)
    {

        if (e.RowIndex == -1) return;

        DataGridViewTextBoxCell cb = (DataGridViewTextBoxCell)dataGridView1.Rows[e.RowIndex].Cells[0];
        if (cb.Value != null)
        {

            con = new SqlConnection(connectionString);
            con.Open();

            SqlCommand command = new SqlCommand("SELECT name, price FROM product where productID=@pid", con);
            command.Parameters.AddWithValue("pid", cb.Value.ToString());

            using (SqlDataReader reader = command.ExecuteReader())
            {
                if (reader.Read())
                {
                    dataGridView1.CurrentRow.Cells["productName"].Value = reader["name"];
                    dataGridView1.CurrentRow.Cells["productPrice"].Value = reader["price"];
                }
            }

            con.Close();

        }  
    }

И событие CurrentCellDirtyStateChanged, которое немедленно вносит изменения в столбцы при вводе в первый столбец.

private void dataGridView1_CurrentCellDirtyStateChanged(object sender, EventArgs e)
    {
        if (dataGridView1.IsCurrentCellDirty)
        {
            dataGridView1.CommitEdit(DataGridViewDataErrorContexts.Commit);   
        }
    }

Приветствия

Тема

1 Ответ

0 голосов
/ 21 февраля 2019

Вам необходимо отписать функцию от события после того, как код был выполнен впервые, чтобы код выполнялся только один раз.Это будет похоже на Form1.DatagridView.CellValueChanged -= dataGridView1_CellValueChanged;

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...