4

に自動番号列を追加する次のコードがありますDataTable

public void AddAutoIncrementColumn(DataTable dt)
{
   DataColumn column = new DataColumn();
   column.DataType = System.Type.GetType("System.Int32");
   column.AutoIncrement = true;
   column.AutoIncrementSeed = 0;
   column.AutoIncrementStep = 1;
   dt.Columns.Add(column);
}

ただし、この値は、テーブルに既に存在するすべての行に対して空白になります。AutoIncrement は、この列が追加された後に追加された新しい行に対してのみトリガーされるようです。既に存在する行にオートナンバーの値を設定する方法はありますか?

4

4 に答える 4

9

AutoIncrement行が既にテーブルにある場合、機能をトリガーすることはできないと思います。ただし、テーブルを手動で簡単に更新できます。

public void AddAutoIncrementColumn(DataTable dt)
{
    DataColumn column = new DataColumn();
    column.DataType = System.Type.GetType("System.Int32");
    column.AutoIncrement = true;
    column.AutoIncrementSeed = 0;
    column.AutoIncrementStep = 1;
    dt.Columns.Add(column);
    int index = -1;
    foreach (DataRow row in dt.Rows)
    {
        row.SetField(column, ++index);
    }
}
于 2013-04-23T21:55:02.867 に答える
1

すべての行をループする必要のない簡単な方法があると思います。CreateDataReader と呼ばれる Datatable のメソッドがあります。したがって、元のデータテーブルを複製し、ID 列を追加し、元のテーブルからデータリーダーを作成してから、データリーダーで複製されたテーブルをロードします。これにより、識別列に数値が生成されます。

// original data table
DataTable origDT;

// create a reader
DataReader dr = origDT.CreatDataReader();

//clone original
DataTable clonedDT  = origDT.Clone();

//add identity column
clonedDT.Columns.Add(new DataColumn(){AutoIncrement=true});

//load clone from reader, identity col will auto-populate with values
clonedDT.Load(dr);
于 2018-06-27T05:25:27.280 に答える