- - PR -
DataGridの値について(C# Winフォーム)
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2006-02-09 22:29
>上記のように記述すると「アクセスするOriginalデータがありません」と怒られてしまいます。何がいけないのでしょうか?
文字通り"Originalデータ"がないのでしょう。 V_cldtのデータをどのように生成しているのわかりませんが、DataAdapterのFillメソッドなどでデータベースから正常に取得できているとすれば、興味深い症状です。 MessageBox.Show(dr["ui_record"].ToString()); と変更してデータを表示できますか。 | ||||
|
投稿日時: 2006-02-10 11:48
お世話になります。
上記のように記述してデータを表示することは出来ました。 DBの値取得は下記のように書いています。 SqlDataReader V_clReader = V_cldb.SqlExecuteReader(V_sSQL); while(V_clReader.Read()) { DataRow V_cldr = V_cldt.NewRow(); V_cldr[0] = V_clReader["test1"].ToString().Trim(); V_cldr[1] = V_clReader["test2"].ToString().Trim(); V_cldr[2] = V_clReader["test3"].ToString().Trim(); V_cldt.Rows.Add(V_cldr); } dataGrid1.DataSource = V_cldt; どうでしょうか? | ||||
|
投稿日時: 2006-02-10 12:48
>上記のように記述してデータを表示することは出来ました。
Current状態のデータが存在して、Original状態が存在しないのなら、AcceptChangesをしていないからだと思います。 DataGridに表示できる程度の"巨大ではない"件数をDataTableに取得するなら、DataAdapterでFillする方が簡単で手間要らずだと思いますが、SqlDataReaderで1件づつ取り出しているには何か理由があるのですか。 | ||||
|
投稿日時: 2006-02-10 12:49
().Trim(); が原因?
| ||||
|
投稿日時: 2006-02-10 14:14
お世話になっております。
ロード時にAcceptChangesしてあげるとORiginal状態が取れるようになりました。 一件ずつ取り出している理由は変更したデータが直ぐに反映されないように等です。 | ||||
|
投稿日時: 2006-02-10 14:55
>一件ずつ取り出している理由は変更したデータが直ぐに反映されないように等です。
本題は解決済みなのでトトロさんはもう見ていないかもしれませんが。 DataAdapterを使ってFillしたものであってもDataTableへの更新内容が直ぐにデータベースに反映される訳ではありません。 コードのどこかで.Updateする必要があります。しかもUpdate時に発行するSQL文は、DataAdapterのUpdatecommandで定義する仕組みですから、これを定義していなければ、.Updateしても変更内容はデータベースに反映されません。 | ||||
|
投稿日時: 2006-02-10 15:15
いつもお世話になっております。
変更前データの取得の件、ありがとうございました。 DB更新の件は勘違いしていました。 すみません。 [ メッセージ編集済み 編集者: トトロ 編集日時 2006-02-10 15:18 ] |