tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトルDataGridViewのセル入力、変更について
記事No7494
投稿日: 2008/05/11(Sun) 17:07
投稿者monmon
お世話になります。
DataGridViewのセルに入力したつもりのDATAが、再起動すると消えていますが
プロパティを指定しないと駄目でしょうか。DATAはAccessのMDBです。
よろしくお願いします。

[ツリー表示へ]
タイトルRe: DataGridViewのセル入力、変更について
記事No7496
投稿日: 2008/05/12(Mon) 09:31
投稿者魔界の仮面弁士
> DataGridViewのセルに入力したつもりのDATAが、
ユーザが手動操作で入力したデータでしょうか?
プログラムで入力させたデータでしょうか?

また、DataGridView はデータバインドでの利用ですか? それとも非連結?

> 再起動すると消えていますが
アプリケーションの再起動でしょうか?
Windows OS 自体の再起動でしょうか?

> DATAはAccessのMDBです。
そのデータを、DataGridView に表示させるために、どのようなコードを書いていますか?
また、DataGridView 内のデータを mdb に反映させるために、どのようなコードを書きましたか?

[ツリー表示へ]
タイトルRe^2: DataGridViewのセル入力、変更について
記事No7497
投稿日: 2008/05/12(Mon) 11:00
投稿者monmon
> > DataGridViewのセルに入力したつもりのDATAが、
> ユーザが手動操作で入力したデータでしょうか?
> プログラムで入力させたデータでしょうか?
>
以前に作成したMDBデータです。

> また、DataGridView はデータバインドでの利用ですか? それとも非連結?
>
  Dim cn1 As New OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=" & filedd & ";")
        Dim cmd1 As New OleDb.OleDbCommand("SELECT * FROM 図書DATA order by 登録番号", cn1)
        cn1.Open()
         Dim dAdp As OleDb.OleDbDataAdapter
        Dim dSet As DataSet = New DataSet("図書貸出返却台帳")

        ken = " clsno,貸出年月日"
        dAdp = New OleDb.OleDbDataAdapter("SELECT * From 図書貸出返却台帳 " & zyouken & " ORDER by " & ken & ";", cn1)
        dAdp.Fill(dSet, "図書貸出返却台帳")
        DataGridView1.DataSource = dSet.Tables("図書貸出返却台帳")
のようにして呼び出しています。

> > 再起動すると消えていますが
> アプリケーションの再起動でしょうか?
> Windows OS 自体の再起動でしょうか?
>
アプリケーションの再起動です。
> > DATAはAccessのMDBです。
> そのデータを、DataGridView に表示させるために、どのようなコードを書いていますか?
> また、DataGridView 内のデータを mdb に反映させるために、どのようなコードを書きましたか?
コードの書き方がわかりません。 ご指導お願いします。

[ツリー表示へ]
タイトルRe^3: DataGridViewのセル入力、変更について
記事No7501
投稿日: 2008/05/12(Mon) 22:04
投稿者魔界の仮面弁士
編集した後、それを mdb に書き戻す処理が書かれていないためですね。

これを解決するには、ユーザ操作の更新完了後に、データの保存のために
『DataAdapter (または TableAdapter の) Update メソッド』を呼び出してください。


処理の流れを大雑把に説明すると:

>         dAdp.Fill(dSet, "図書貸出返却台帳")
まずはこの Fill 操作により、mdb 内のデータが、"図書貸出返却台帳" という名前の
DataTable として、DataSet 内に格納されることになります。

そしてそれを
>         DataGridView1.DataSource = dSet.Tables("図書貸出返却台帳")
のようにして呼び出しているわけですよね。ここまでは表示のための処理です。

そして、DataGridView をユーザが編集すると、その編集結果が DataTable 内に書きこまれます。
(これらの編集結果は、メモリ内の DataTable に書き込まれただけであって、元データである
mdb 側には、何の編集も行われていないという事に注意が必要です)


このとき DataTable の内部では、編集前と編集後の両方のデータが保持されています。
さらに、その編集状況に対して、「削除された行」「編集された行」「未変更の行」
あるいは「新規行」といった状態が、それぞれの行(DataRow クラス)ごとに、
RowState プロパティとして保存されています。


ここからが本題。

このように蓄えられた変更結果を基に、mdb に対して、編集作業をかける事になります。
これは先ほど書いた、Update メソッドによって行われます。具体的には以下のようなものです。
 dAdp.Update(dSet.Tables("図書貸出返却台帳"))

Update メソッドは、先ほどの「編集状況(RowState プロパティ)」と、
その内部に持っている新旧のデータを基にして、
 新規行:INSERT INTO の SQL (InsertCommand プロパティ)
 編集行:UPDATE の SQL (UpdateCommand プロパティ)
 削除行:DELETE の SQL (DeleteCommand プロパティ)
という個別の SQL を発行する仕組みになっています。
# この振り分け作業は、Update メソッド内で自動的に行われます。

更新作業の際には、これら InsertCommand/UpdateCommand/DeleteCommand の設定内容が
重要になってきます。もしも更新がうまくいかない場合には、これらのプロパティの
内容が適切であるか、確認してみてください。


これらは、"ADO.NET" の基礎となる物ところなので、よく勉強しておいてくださいね。

http://www.microsoft.com/japan/msdn/thisweek/10lines/adonet_dataupdate.aspx
http://www.microsoft.com/japan/msdn/thisweek/10lines/vs2005/adonet_dataupdate/vb.aspx
http://msdn.microsoft.com/ja-jp/library/33y2221y.aspx

[ツリー表示へ]
タイトルRe^4: DataGridViewのセル入力、変更について
記事No7502
投稿日: 2008/05/13(Tue) 09:44
投稿者monmon
魔界の仮面弁士様
「DataGridViewのセル入力、変更について」早速のご指導ありがとうございました。
今から、実行してみます。
実行できないときは、またよろしくお願いします。

[ツリー表示へ]