Как добавить в 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 шт):
Оформлю ответом.
Ваш 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, то такого не случится никогда.