Как добавить в dataGridView недостающую цифру?

Есть некий вопрос. Как мне добавить ID, которая пропущена в нумерации, к примеру 1,2,3,5 - здесь как раз пропущена ID 4 и соответственно на место нее хотелось бы вставить... А если нет пропусков , вставить следующую цифру - к примеру, 1,2,3,4,5 + еще ID = 6. Но идей вообще никаких!? Я смог реализовать только добавление последнего ID... Вот как раз здесь в datagridview пропущена цифра 14.. и заместо нее хотелось бы добавить эту цифру 14. Как???

пример

В следующем коде, он просто добавляет следующий ID=17, но яб хотел чтобы он добавлял 14 или если нет пропуска в 14, уже как раз 17...

                    int countid = 0;
                    for (int i = 0; i < dataGridView1.Rows.Count; i++)
                    {
                        countid = Convert.ToInt32(dataGridView1.Rows[i].Cells[0].Value) + 1;
                    }
                    int clientID = comboBox1.SelectedIndex + 1;
                    int mastersID = comboBox2.SelectedIndex + 1;
                    if (masterFound == false)
                    {
                        DB database = new DB();

                        string query3 = "INSERT INTO queryautoservice(`ID`,`DateVisit`,`Done`,`DateReady`,`Clients_ID`,`Masters_ID`) VALUES ('" + countid + "','" + dateTimePicker1.Text + "','" + ready + "','" + dateTimePicker2.Text + "','" + clientID + "','" + mastersID + "');";
                        MySqlCommand command3 = new MySqlCommand(query3, database.getCon());
                        database.openCon();
                        if (command3.ExecuteNonQuery() == 1)
                            MessageBox.Show("Изменения внесены");
                        database.closeCon();
                    }
                    else MessageBox.Show("Мастер уже занят");
}

Ответы (1 шт):

Автор решения: aepot

Оформлю ответом.

Ваш ID соответствует номеру записи в таблице базы данных (PRIMARY KEY), так? Тогда это служебная колонка, не надо ее вообще отображать. По ней надо идентифицировать уникальные записи, больше ничего. Пропуски в ID - это нормально, так и должно быть. Например вы добавили 3 записи в пустую таблицу, потом вторую удалили, станет 1,3, а когда вы добавите еще одну, станет 1,3,4. С этим не нужно ничего делать.

В запросе INSERT не нужно указывать колонку PRIMARY KEY вообще, база данных заполнит ее сама автоматически. Поставьте этой колонке свойство AUTO_INCREMENT, если еще этого не сделали. То есть приложение не должно создавать ID, создавать его должна сама база данных.

если я удалю ID=16 то следующий добавленный не будет 16 , а будет 17. И будет пропуск 15-17. Да и будут ошибки в отображении в другой форме.

Так и должно быть. Если у вас из-за этого ошибки, нужно исправлять логику приложения с учетом этой особенности.

Когда вы добавляете запись через INSERT, на этом этапе приложение вообще не знает ID, оно его может узнать, если после добавления вы сделаете SELECT и обновите данные в таблице. Это соверешенно нормальный сценарий работы с базой данных.

То есть не надо угадывать ID, надо его получать запросом в БД. БД является основным источником данных, а не то что у вас уже загружено в приложении. То есть формы между собой данные из таблиц не должны передавать, они должны общаться друг с другом только через БД.

Еще представьте себе многопользовательский сценарий, 20 клиентских приложений создают новые записи в таблицах, представьте что 10 из них решили создать запись с ID = 10, в результате 9 из них получат отказ, так? А если база будет сама присваивать ID, то такого не случится никогда.

→ Ссылка