#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.