Как обновить изменения в источнике данных после изменения значения ячейки в dataGridView? - PullRequest
1 голос
/ 06 марта 2019

Пользователь вносит изменения в ячейку.
Событие CellEndEdit вызвано.
В методе Save () изменения отображаются в строке adapter.Update (table_2);.
Изменения не отображаются в базе данных (изменения не сохраняются в базе данных).

Если пользователь вызывает метод Save () с помощью кнопки, изменения отображаются в базе данных (в таблице источников данных dataGridView).

Вопрос.
Как обновить изменения в источнике данных после изменения значения ячейки в dataGridView?

Мой код

 private void dataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e)
        {
            i++;
            Save();
            richTextBox1.Text += i + " Event - `CellEndEdit` \r\n";
        }


     public DataTable CreateCmds()
            {
                table_2 = new DataTable();
                try
                {
                    string connectionString = @"Data Source=.\SQLEXPRESS1;Initial Catalog=Prb;Integrated Security=True";              

                    string queryString = "SELECT * FROM tbl_01_Groups";

                    using (SqlConnection connection = new SqlConnection(connectionString))
                    {
                        adapter = new SqlDataAdapter();
                        adapter.SelectCommand = new SqlCommand(queryString, connection);
                        SqlCommandBuilder builder = new SqlCommandBuilder(adapter);

                        connection.Open();

                        adapter.Fill(table_2);
                    }

                }
                catch (Exception ex)
                {

                    string s = ex.Message;
                    string t = ex.StackTrace;
                    // throw;
                }

                return table_2;
            }

            public void Save()
            {
                string connectionString = @"Data Source=.\SQLEXPRESS1;Initial Catalog=Prb;Integrated Security=True";

                string queryString = "SELECT * FROM tbl_01_Groups";

                using (SqlConnection connection = new SqlConnection(connectionString))
                {
                    adapter = new SqlDataAdapter();
                    adapter.SelectCommand = new SqlCommand(queryString, connection);
                    SqlCommandBuilder builder = new SqlCommandBuilder(adapter);

                    connection.Open();

                    adapter.Update(table_2);
                }
            }

enter image description here

Update_1
То же самое происходит, когда я использую событие CellValueChanged.
Событие CellValueChanged вызвано.
В методе Save () изменения отображаются в строке adapter.Update (table_2);.
Изменения не отображаются в базе данных (изменения не сохраняются в базе данных).

private void dataGridView1_CellValueChanged(object sender, DataGridViewCellEventArgs e)
        {
            i++;
            Save();
            richTextBox1.Text += i + " Event - `CellValueChanged` \r\n";
        }

1 Ответ

1 голос
/ 06 марта 2019

Документация MSDN на CellEndEdit:

Происходит, когда режим редактирования останавливается для текущей выбранной ячейки.

и следует примеру того, как перехватить это событие, инициирующее в случае неправильной проверки - поэтому оно останавливается: не потому, что пользователь завершил, а потому, что произошло событие проверки. С другой стороны, документация MSDN на CellValueChanged говорит, что

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

в твоем случае. Ура!

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