Сброс автоинкремента в DataTable

#c# #datatable

#c# #datatable

Вопрос:

Я заполняю a DataSet с помощью a DataAdapter в базу данных SQL CE. Данные отображаются на DataGrid , который привязан к DataTable DataSet. У меня есть поле идентификатора автоинкремента (или, в SQLCE, вызываемое PRIMARY KEY IDENTITY ) в моем источнике данных; соответственно, я также установил столбец идентификатора автоинкремента в моем DataTable .

 /* when DataTable is first populated, start counting from Rows.Count */
/* if empty, starts with 1 */
dt.Column["id"].AutoIncrementSeed = dt.Rows.Count   1;
  

Проблема возникает, когда я очищаю свой DataTable. Я хочу сбросить счетчик автоинкремента обратно на 1, но не смог, я попробовал следующее:

 /* clearing and disposing DataTable, DataSet, DataAdaptor does not reset the counter */
dt.Clear();
dt.Dispose();
ds.Clear();
ds.Dispose()
da.Dispose()

/* manually re-setting the AutoIncrementSeed also does not reset the counter */
dt.Column["id"].AutoIncrementSeed = 1;
  

Он просто ушел со счетчиком, который был отключен ранее Clear() . Как я могу сбросить автоинкремент в DataTable?

Ответ №1:

Используйте следующим образом

 dt.Clear();
dt.Column["id"].AutoIncrementStep = -1;
dt.Column["id"].AutoIncrementSeed = -1;

dt.Column["id"].AutoIncrementStep = 1;
dt.Column["id"].AutoIncrementSeed = 1;
  

Проверьте ссылку ниже для получения дополнительной информации

http://www.eggheadcafe.com/community/aspnet/10/25407/autoincrementseed.aspx

Ответ №2:

Я упростил код до этой версии:

 dt.Column["id"].AutoIncrement = True
dt.Column["id"].AutoIncrementSeed = 0
dt.Column["id"].AutoIncrementStep = -1
dt.Column["id"].AutoIncrementSeed = -1
  

Для меня это лучше, из-за значений -1 начального значения и шага.
Я думаю, что реализация свойства AutoIncrementSeed выглядит следующим образом:

 if (_AutoIncrementSeed <> value)
    _InternalAutoIncrementSeed = value 
_AutoIncrementSeed = value
  

и _InternalAutoIncrementSeed используется в функции newRow.