0

Проблема следующая: по кнопке создаётся новая пустая строка в конце таблицы (она автоматически выделяется). Необходимо, чтобы при смене пользователем фокуса на другую строчку, эта только что созданная пустая строчка удалялась.

Не уверен, что "удалялась" является правильным в этом случае термином, возможно, правильнее будет сказать "отменить", т.к. если в эту пустую строку внести данные (к колонкам привязаны textbox'ы) и нажать на кнопку "Добавить", то они внесутся в бд и датагрид.

Пытался отталкиваться от этого, но не получается достигнуть поставленной цели:

private void button_newRow_Click_1(object sender, EventArgs e)
        {
            int a;
            dataGridView1.CurrentCell = dataGridView1.Rows[dataGridView1.Rows.Count - 1].Cells[0];
            dataGridView1.Rows.Add();
            int currentRow = dataGridView1.SelectedRows[0].Index;
            if (currentRow < dataGridView1.RowCount)
            {
                dataGridView1.Rows[++currentRow].Selected = true;
                a = dataGridView1.Rows.Count;
                textBox3.Clear(); textBox4.Clear(); textBox5.Clear(); textBox6.Clear(); richTextBox1.Clear(); richTextBox2.Clear();
                textBox3.Focus();
                try 
                {
                    if (dataGridView1.Rows[a].Selected == false)
                    {
                        dataGridView1.Rows.Remove(dataGridView1.Rows[currentRow]);
                        dataGridView1.CurrentCell = dataGridView1.Rows[dataGridView1.Rows.Count - 1].Cells[0];
                        dataGridView1.Rows[--currentRow].Selected = true;
                        dataGridView1_CellClick(dataGridView1, new DataGridViewCellEventArgs(0, 0));
                    }
                }
                catch 
                {
            }

button_newRow.Enabled = false; }

  • https://ru.stackoverflow.com/a/1199692/373567 просто поизучайте, кажется вы не в курсе, что существует привязка данных, чтобы не мучать ячейки. А так, добавьте обработчик SelectionChanged и реализуйте там логику, которая вам нужна. – aepot Jun 04 '22 at 12:04
  • @aepot Про привязку данных в курсе, в моих других вопросах уже мне накидали достаточно справочной информации. В моём случае проблематично работать с привязкой данных: у меня в один датагрид подтягивается информация из шести таблиц access по нажатию соотв. кнопки (не хотел делать 6 гридов, да и уместить же их надо). Не вдуплил как менять datasource/data bindings при смене таблицы. Да и свою проблему, кажется, я уже решил... – m4d_h4tter Jun 04 '22 at 12:14
  • 1
    Привязку менять не надо, а просто присвоить в привязанное свойство к DataSource новую коллекцию данных. Тот же BindingList реализует интерфейс IBindingList, этого типа можно сделать свойство, тогда туда влезет любой список с любым типом данных. Подозреваю, что вам не очень то и хотелось разбираться. Смысл привязок не в том, что это круто и модно, а в том что кода писать в 5 раз меньше придется. Примерно во столько раз похудело мое первое Winforms приложение, когда я узнал про привязки. Познакомтесь ORM Entity Framework, она сама умеет связывать классы и данные в БД, совсем другой мир. – aepot Jun 04 '22 at 12:47
  • 1
    В то что вам советуют достаточно часа, чтобы базово вникнуть, как работает, было бы желание. Вы же не пришли сюда спрашивать "как изменить коллекцию в DataSource", вы пришли продолжать развивать костыли :) "Костыли", потому что это не дорабатываемый и не обслуживаемый код, его много, он сильно завязан на конкретный контрол, код весь в одном классе, длинная портянка. Самый главный минус этого, если вы перестанете писать приложение, а через годик вернетесь к дописыванию, то сами не вспомните, как оно работает, у меня такое было и не раз. Поэтому стремиться надо к простоте кода изо-всех сил. – aepot Jun 04 '22 at 12:52

0 Answers0