我认为这会相当容易,但我现在...我试图简单地向现有 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);
“Debug.Print”之前/之后的两行都显示计数为 44。为什么“之后”调试不告诉我 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);
最佳答案
如果你想使用NewRow
,你必须稍后Add
DataRow
到表中:
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);
另一种方法是使用 DataRowColection.Add
:
DataRow newRow = Manager.achievementsMine.Rows.Add();
// you don't need to add this row since it's already added.
注意:不要调用AcceptChanges
如果您想稍后将新行插入数据库。 AcceptChanges
会将其 RowState
更改为未更改,因此 DataAdapter
无法检测到该行是新行。 DataAdapter
本身将在 Update
结束时调用它。
关于c# - 如何将数据添加到 C# DataTable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19793288/