如何使用C#向datatable添加标识列。我正在使用Sql Compact Server。
也许你可以尝试像这样做?
private void AddAutoIncrementColumn()
{
DataColumn column = new DataColumn();
column.DataType = System.Type.GetType("System.Int32");
column.AutoIncrement = true;
column.AutoIncrementSeed = 1000;
column.AutoIncrementStep = 10;
// Add the column to a new DataTable.
DataTable table = new DataTable("table");
table.Columns.Add(column);
}
DataTable table = new DataTable("table");
DataColumn dc= table.Columns.Add("id", typeof(int));
dc.AutoIncrement=true;
dc.AutoIncrementSeed = 1;
dc.AutoIncrementStep = 1;
// Add the new column name in DataTable
table.Columns.Add("name",typeof(string));
table.Rows.Add(null, "A");
table.Rows.Add(null, "B");
table.Rows.Add(null, "C");
void AddAndPopulateDataTableRowID(DataTable dt, string col, bool isGUID)
{
if(isGUID)
dt.Columns.Add(col, typeof(System.Guid));
else
dt.Columns.Add(col, typeof(System.Int32));
int rowid = 1;
foreach (DataRow dr in dt.Rows)
{
if (isGUID)
dr[col] = Guid.NewGuid();
else
dr[col] = rowid++;
}
}
如果您想使应用程序成为单用户应用程序,那么不要在DataTable(或前端)上执行自动递增操作。如果您需要自动递增,请在数据库中执行此操作,然后将从数据库检索到的自动递增ID传输到前端。
请参见我的答案,只需将SqliteDataAdapter更改为SqlDataAdapter,SqliteConnection更改为SqlConnection等即可:anyway see why I get this "Concurrency Violation" in these few lines of code??? Concurrency violation: the UpdateCommand affected 0 of the expected 1 records
如果您正在使用插入和删除数据表格,我不认为在数据表格上使用自增是一个好主意,因为数字将不会重新排列。最终,我将分享一个小想法,如何手动使用自增。
DataTable dt = new DataTable();
dt.Columns.Add("ID",typeof(int));
dt.Columns.Add("Produto Nome", typeof(string));
dt.Rows.Add(null, "A");
dt.Rows.Add(null, "B");
dt.Rows.Add(null, "C");
for(int i=0;i < dt.Rows.Count;i++)
{
dt.Rows[i]["ID"] = i + 1;
}
每次在插入或删除操作完成时,都必须运行此循环。
for(int i=0;i < dt.Rows.Count;i++)
{
dt.Rows[i]["ID"] = i + 1;
}
DataTable
不会更改数据库,我相信这是 OP 的问题的关键部分。 - andr仅提供我的意见。自动递增在Winform
应用程序中非常有用(正如Michael Buen所说的那样),即:
DatagridView
被用于显示没有“关键字段”的数据,同样可以用于枚举。