C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[3]: DataGridViewで表示、変更したデータをDBに反映


(過去ログ 45 を表示中)

[トピック内 4 記事 (1 - 4 表示)]  << 0 >>

■23655 / inTopicNo.1)  DataGridViewで表示、変更したデータをDBに反映
  
□投稿者/ 追いつけない泥グラマ (1回)-(2008/08/20(Wed) 02:06:20)

分類:[C#] 

本当に申し訳ありません…
(環境:Access2003、WindowsXPとVista、.net2005 C#)
(過去にも似たような質問があったのですが
 完結した内容がなく終わっているもので…改めて記載させていただきます)

DataGridViewにAccesss(mdb)のデータを表示して
変更をして、フォーム上に作成した「保存」ボタンを押して
元のmdbに変更内容を反映したいのですが

いろいろ調べてみると、TableAdapter.Updateをすると更新ができるとあったのですが
TableAdapter.Updateに渡すDatasetをDataGridViewからどうやって取り出すのかがわからずじまいです。
その前にTableAdapterの宣言も「保存」ボタンの中で新規に宣言してよいものかと?

申し訳ないですがDataGridViewの更新方法がわかる方がいらっしゃいましたら
簡潔に教えていただけないでしょうか?

よろしくお願いいたします。

DataGridViewに表示する部分は次のとおりです

        private void form_Load(object sender, EventArgs e)
        {
            System.Data.OleDb.OleDbConnection OleConn = new System.Data.OleDb.OleDbConnection();
            System.Data.OleDb.OleDbDataAdapter OleDA;
            DataSet dtSet = new DataSet("ITEMLIST");

            OleConn.ConnectionString =
            "Provider=Microsoft.Jet.OLEDB.4.0;" +
            "Data Source=c:\\sample.mdb;" +
            "Persist Security Info=False";

            OleDA = new System.Data.OleDb.OleDbDataAdapter("SELECT * FROM 商品名", OleConn);

            OleDA.Fill(dtSet, "ITEMLIST");

            dataGridView1.DataSource = dtSet.Tables[0];

            dtSet.Dispose();
        }  



引用返信 編集キー/
■23660 / inTopicNo.2)  Re[1]: DataGridViewで表示、変更したデータをDBに反映
□投稿者/ 魔界の仮面弁士 (826回)-(2008/08/20(Wed) 09:29:40)
2008/08/20(Wed) 09:31:01 編集(投稿者)

No23655 (追いつけない泥グラマ さん) に返信
> いろいろ調べてみると、TableAdapter.Updateをすると更新ができるとあったのですが

そこに書かれていた方法は、「TableAdapter」だったのかも知れませんが、
追いつけない泥グラマさんは「DataAdapter」を使っておられますよ(両者は別物です)。

まぁ、TableAdapter は DataAdapter の集合体のような物なので、どちらでも良いですけど。

ちなみに、TableAdapter による更新例としてはこちら。
http://www.microsoft.com/japan/msdn/thisweek/10lines/vs2005/adonet_dataupdate/cs.aspx


> TableAdapter.Updateに渡すDatasetをDataGridViewからどうやって取り出すのかがわからずじまいです。

DataGridView.DataSource に渡した DataSet/DataTable を、更新時に取り返す(キャストする)事もできなくは無いのですが、
ここは、DataGridView.DataSource に渡した後も、アダプタをそのまま保持し続けるという手法にしてみては如何でしょうか。


DataSet dtSet = new DataSet();
OleDbConnection OleConn;
OleDbDataAdapter OleDA;
private void Form1_Load(object sender, EventArgs e)
{
 // 接続文字列の指定には、OleDbConnectionStringBuilder を使うと便利かも。
 OleConn = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\db1.mdb;");

 // 後で更新する必要があるので、SELECT 文には主キー項目を含めておくこと。
 OleDA = new OleDbDataAdapter("SELECT * FROM table1", OleConn);

 // 更新用の INSERT/DELETE/UPDATE 文を自動生成するための処理
 OleDbCommandBuilder builder = new OleDbCommandBuilder(OleDA);

 // データ取り出し
 OleDA.Fill(dtSet);

 // データ表示
 dataGridView1.DataSource = dtSet.Tables[0];
}

// 更新ボタン
private void button1_Click(object sender, EventArgs e)
{
 // DataGridView で変更された結果を反映
 OleDA.Update(dtSet);
}
引用返信 編集キー/
■23780 / inTopicNo.3)  Re[2]: DataGridViewで表示、変更したデータをDBに反映
□投稿者/ 泥グラマ (1回)-(2008/08/21(Thu) 21:23:53)
No23660 (魔界の仮面弁士 さん) に返信

書き込みありがとうございます。
早速明日やってみます。
もしできましたら、報告いたします。

そしてご指摘いただいたとおり
TableAdapterとDataAdapterの区別すらついていませんでした。
ありがとうございます。

そして…驚いたのですが、実は黒いVB掲示板でも、かなり昔に
魔界の仮面弁士様にアドバイスを頂いたことがあるんです。
(自分の名前は忘れたのですが…)
すごい名前だったので覚えていたのですが、またお世話になるとは驚きです。
また…多分これからもお世話になると思いますが、重ね重ねよろしくお願い申し上げます。

引用返信 編集キー/
■23986 / inTopicNo.4)  Re[3]: DataGridViewで表示、変更したデータをDBに反映
□投稿者/ 泥グラマ (2回)-(2008/08/26(Tue) 10:31:31)
魔界の仮面弁士様の記述していただいた内容でバッチリ動きました。
ただ追加項目については別途sqlを書く必要があったので
その点についてはレコード数は変わらない内容でしたので追加できないような仕様にしてしまいました・・・

ありがとうございました。

解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -