如何将数据添加到C#DataTable

Nic*_*tka 1 c# import datatable datarow

我认为这会相当容易但我在这里......我只是想在现有的地方添加一个新行, DataTable但是这个表不会占用我的行......

Debug.Print("My Achv Count Before: {0}", Manager.achievementsMine.Rows.Count);
DataRow newRow = Manager.achievementsMine.NewRow();
newRow.SetField<int>("CT_Q", count);
newRow.SetField<DateTime>("CMPL_D", DateTime.Now);
newRow.SetField<string>("USER_LAN_I", Manager.userID);
newRow.SetField<string>("ACHV_I", ACHV_I);
Manager.achievementsMine.ImportRow(newRow);
Manager.achievementsMine.AcceptChanges();
Debug.Print("My Achv Count After: {0}", Manager.achievementsMine.Rows.Count);
Run Code Online (Sandbox Code Playgroud)

'Debug.Print'之前/之后的行都显示为44.为什么'after'调试告诉我45因为我刚刚导入一个新行并告诉DataTable接受更改?

编辑:我尝试重写一些newRow部分,但没有改变:

Debug.Print("My Achv Count Before: {0}", Manager.achievementsMine.Rows.Count);
DataRow newRow = Manager.achievementsMine.NewRow();
newRow["CT_Q"] = count;
newRow["CMPL_D"] = DateTime.Now;
newRow["USER_LAN_I"] = Manager.userID;
newRow["ACHV_I"] = ACHV_I;
Manager.achievementsMine.ImportRow(newRow);
Manager.achievementsMine.AcceptChanges();
Debug.Print("My Achv Count After: {0}", Manager.achievementsMine.Rows.Count);
Run Code Online (Sandbox Code Playgroud)

Tim*_*ter 6

如果你想使用NewRow你必须AddDataRow以后的表格:

DataRow newRow = Manager.achievementsMine.NewRow();
newRow.SetField<int>("CT_Q", count);
newRow.SetField<DateTime>("CMPL_D", DateTime.Now);
newRow.SetField<string>("USER_LAN_I", Manager.userID);
newRow.SetField<string>("ACHV_I", ACHV_I);
Manager.achievementsMine.Rows.Add(newRow);
Run Code Online (Sandbox Code Playgroud)

另一种方法是使用DataRowColection.Add:

DataRow newRow = Manager.achievementsMine.Rows.Add();
// you don't need to add this row since it's already added.
Run Code Online (Sandbox Code Playgroud)

注意:AcceptChanges如果要稍后将新行插入数据库,不要调用.AcceptChanges将它更改RowState为未更改,因此DataAdapter无法检测到此行是新的.它DataAdapter本身将在最后调用它Update.