- PR -

DataGridViewの内容をデータベースへ反映

投稿者投稿内容
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2008-10-03 22:15
サンプルの前に、言語体系を身につけてください。
英語の文法や単語がわからないのに、字幕なしの英語の映画を見て内容が理解できると思いますか?

プログラムを組むのは、その後です。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2008-10-07 18:43
宣言されていないとでるのは、
For Each I As DataGridViewRow In dgrview.Rows

I だから。こう直す。
For Each row As DataGridViewRow In dgrview.Rows


更新は、DataGridView に渡した DataSet があるのでは?そちらで更新すればいいでしょう。
King
ぬし
会議室デビュー日: 2008/06/20
投稿数: 284
投稿日時: 2008-10-08 09:23
例え row が宣言できても
DataGridViewRow に RowState が無いからまたエラーが出ますね・・・。
chiroru
ベテラン
会議室デビュー日: 2008/10/02
投稿数: 59
投稿日時: 2008-10-08 09:42
引用:

例え row が宣言できても
DataGridViewRow に RowState が無いからまたエラーが出ますね・・・。


はい…
  For Each row As DataGridViewRow In dgrview.Rows
    Select Case row.RowState
      Case DataRowState.Added
        '▼新規追加されたレコードの場合 :Insert文実行
      Case DataRowState.Deleted
        '▼削除されたレコードの場合    :Update文実行
      Case DataRowState.Modified
        '▼修正されたレコードの場合    :Delete文実行
      Case Else
    End Select
  Next
とするとrow.RowStateでエラーになります。
<エラー>
'RowState' は 'System.Windows.Forms.DataGridViewRow' のメンバではありません。
RowStateはここでは取得できないのでしょうか?

King
ぬし
会議室デビュー日: 2008/06/20
投稿数: 284
投稿日時: 2008-10-08 10:22
やはり Jitta さんの仰っている通り基礎を身に付けるのが先決だと思います。
「それは時間がかかるから・・・」
と思うとしても結果としてこのまま進めるとそれ以上に時間がかかると思います。
「こう書いたら出来るんじゃないの?」→「できました!」
ってなったとしてもまたすぐに
「○○となります。なぜ○○できないのですか?」
と言う繰り返しになると思うからです。

とりあえずこの質問に関して。
RowState が使えないのは DataGridViewRow に RowState プロパティが無いからです。
RowState プロパティがあるのは DataRow です。
なのでそこでは使えません。
chiroru
ベテラン
会議室デビュー日: 2008/10/02
投稿数: 59
投稿日時: 2008-10-08 10:30
引用:

とりあえずこの質問に関して。
RowState が使えないのは DataGridViewRow に RowState プロパティが無いからです。
RowState プロパティがあるのは DataRow です。
なのでそこでは使えません。


最近、.netを勉強し始めたばかりでとりあえず勉強用の簡単なシステムを作りながら覚えようとしていたのですが、なかなか前には進めずにいます。
もう少し違う方法で学習を続けていこうと思います。
ありがとうございました。
chiroru
ベテラン
会議室デビュー日: 2008/10/02
投稿数: 59
投稿日時: 2008-10-08 14:47
みなさんお騒がせしました。
なんとか下記のようにして解決できました。
ありがとうございました。

Dim SQL As String
Dim Row As DataRow
Dim comm As SqlCommand = Con.CreateCommand
Dim ds As DataSet = New DataSet()
ds = CType(dgrview.DataSource, DataSet)
Dim Table As DataTable = New DataTable()
Table = ds.Tables("テーブル名")
Dim Row As DataRow
For Each Row In Table.Rows
  Select Case Row.RowState
    Case DataRowState.Added
      '▼新規追加されたレコードの場合
    Case DataRowState.Modified
      '▼修正されたレコードの場合
    Case DataRowState.Deleted
      '▼削除されたレコードの場合
    Case Else
      Continue For
  End Select
  comm.CommandText = SQL
  comm.ExecuteNonQuery()
Next
Table.Dispose()
ds.Dispose()
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2008-10-09 17:46
引用:

chiroruさんの書き込み (2008-10-08 14:47) より:
みなさんお騒がせしました。
なんとか下記のようにして解決できました。
ありがとうございました。

Dim SQL As String
Dim Row As DataRow
Dim comm As SqlCommand = Con.CreateCommand
Dim ds As DataSet = New DataSet()
ds = CType(dgrview.DataSource, DataSet)
Dim Table As DataTable = New DataTable()
Table = ds.Tables("テーブル名")
Dim Row As DataRow
For Each Row In Table.Rows
  Select Case Row.RowState
    Case DataRowState.Added
      '▼新規追加されたレコードの場合
    Case DataRowState.Modified
      '▼修正されたレコードの場合
    Case DataRowState.Deleted
      '▼削除されたレコードの場合
    Case Else
      Continue For
  End Select
  comm.CommandText = SQL
  comm.ExecuteNonQuery()
Next
Table.Dispose()
ds.Dispose()


 DataGridView に所属させている DataSet を Dispose してはいけません。この DataSet は、DataGridView に Dispose させるべきです。


> Dim ds As DataSet = New DataSet()
> ds = CType(dgrview.DataSource, DataSet)
 ds を New していますが、その直後に DataGridView.DataSource のものを設定するので、New した DataSet が浮いてしまいます。New は不要です。
→ Dim ds As DataSet = CType(dgrview.DataSource, DataSet)

次の DataTable も同様。


 で、DataSet に Update というメソッドがあるので、調べておいてください。

スキルアップ/キャリアアップ(JOB@IT)