使用C#如何向DataTable添加身份列

14

如何使用C#向datatable添加标识列。我正在使用Sql Compact Server。

6个回答

25

也许你可以尝试像这样做?

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 中时,这是否会自动填充现有行中的新列? - Lunyx
4
table.Columns.Add(new DataColumn("Id", typeof(int)) { AutoIncrement = true, AutoIncrementSeed = 1, AutoIncrementStep = 1 });这行代码的作用是在表格中添加一个名为"Id"、类型为整数的列,并且开启自动增长,起始值为1,步长为1。 - SteveD

7
 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");

5
如果DataTable已经被填充了,你可以使用以下方法。
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++;
        }

    }

2

如果您想使应用程序成为单用户应用程序,那么不要在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


1
我正在从平面文件中读取数据,并需要向DataTable添加行号 - 有时这是有效的,而且它不会使我的应用程序成为单用户。 - MrTelly
是的,或者用于输出......我正在生成由多个独立读取组成的输出,这些读取需要最终汇总为单个序列。这是 DataTable 的一个非常重要的本地使用......类似于“单用户”的隔离,但并不完全相同。 - Mike M

0

如果您正在使用插入和删除数据表格,我不认为在数据表格上使用自增是一个好主意,因为数字将不会重新排列。最终,我将分享一个小想法,如何手动使用自增。

         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

0

仅提供我的意见。自动递增在Winform应用程序中非常有用(正如Michael Buen所说的那样),即:

DatagridView被用于显示没有“关键字段”的数据,同样可以用于枚举。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接