У меня сложилось впечатление, что сетка данных, являющаяся результатом набора данных из, скажем, Access, не показывает значения PK как -1, -2, -3.
Если вы создали отключенный набор данных ( или дата) в коде из заполнения (извлечение данных из Access), тогда каждая строка обычно не показывает PK.
Однако, независимо от вышеизложенного, при условии, что вы ввели 5 строк, и теперь нужно увидеть Значения PK?
Вы будете во время ввода данных в сетку должны видеть это:
В выше, я добавил две строки , Ваш код сохранения выглядит примерно так:
tblHotels = DataGridView1.DataSource
rstDataReader.Update(tblHotels)
tblHotels.AcceptChanges()
Это отправит данные обратно на SQL сервер (или Access), и затем будут сгенерированы идентификаторы PK с автономным номером. Однако такие изменения НЕ возвращаются в набор данных / данные. Другими словами, идентификаторы PK генерируются в базе данных, но если вы повторно не извлечете данные, вы не увидите значения PK.
Вам придется повторно извлекать данные. Однако вы можете сохранить текущую позицию сетки и повторно заполнить данные следующим образом:
rstDataReader.Update(tblHotels)
tblHotels.AcceptChanges()
Dim MyTop As Integer = DataGridView1.FirstDisplayedScrollingRowIndex
tblHotels.Clear()
rstDataReader.Fill(tblHotels)
DataGridView1.FirstDisplayedScrollingRowIndex = MyTop
И тогда вы должны увидеть это:
Другим способом было бы отправить + обновить каждую строку при редактировании данных, а затем вытащить PK, но очевидно, что вы не сможете обновить все изменения сетки с помощью кнопки SAVE, и таким образом, конечно, нет способности un-do.
Я считаю, что вышеизложенное положение верхней части сетки не мерцает. С другой стороны, я полагаю, что это может / будет зависеть от того, насколько велик набор данных (но опять же, загрузка сетки со слишком большим количеством строк не является идеальной).
Итак, насколько я Можно сказать, что вы должны повторно вытащить набор данных / datatable, чтобы получить новые сгенерированные идентификаторы PK, или вы должны сохранить + pull для каждой редактируемой строки. Для сетки с несколькими сотнями строк я не вижу мерцания с приведенным выше кодом.