1

これはかなり簡単だと思いましたが、ここにいます...既存の行に新しい行を追加しようとして 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 のカウントが表示されます。新しい行をインポートしてDataTable、変更を受け入れるように指示したばかりなので、「後」のデバッグで 45 と表示されないのはなぜですか?

編集:一部の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);
4

1 に答える 1

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

別のアプローチは次を使用していDataRowColection.Addます。

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

AcceptChanges:新しい行を後でデータベースに挿入する場合は、呼び出さないでください。AcceptChanges変更さRowStateDataAdapterないため、この行が新しいことを検出できません。DataAdapter自体が の最後にそれを呼び出しますUpdate

于 2013-11-05T16:02:32.090 に答える