Как добавить данные в C# DataTable

Я думал, что это будет довольно легко, но я здесь... Я пытаюсь просто добавить новую строку в существующую 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);

1 ответ

Решение

Если вы хотите использовать 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,

Другие вопросы по тегам