質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

Q&A

解決済

1回答

6871閲覧

DataGridViewの行の追加ができない

退会済みユーザー

退会済みユーザー

総合スコア0

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

0グッド

0クリップ

投稿2020/03/24 05:47

編集2020/03/25 08:25

前提・実現したいこと

ボタンクリックでDataGridviewに新規で行の追加をしたいです。

発生している問題・エラーメッセージ

vb

1'行の追加 2Private Sub Cmd_Rowsadd_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Cmd_Rowsadd.Click 3 '行追加 4 DataGridview1.Rows.Add() 5 End Sub

DataGridview1.Rows.Add()でエラーメッセージが表示されます。
「コントロールがデータバインドされているとき、DataGridView の行コレクションにプログラムで行を追加することはできません。」

補足情報(FW/ツールのバージョンなど)

vb.Net 2010
Framework 4

色々と調べてはいるのですが、どれも最終的な結果が書いておらずいまいち分かりませんでした。
参考となるURLでもいいのでどなたか、宜しくお願い致します。

追記:前のスレッド https://teratail.com/questions/247663 の続きです。
※最終的にはユーザーがDataGridViewの編集操作を行ったあと、その結果をMySQLへ反映することも目的としています。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2020/03/24 06:23

前のスレッド https://teratail.com/questions/247663 の続きで、それに行を追加しようとしているのですか? そうでなければ、どういう状況から行を追加しようとしているのですか? で、その目的は何ですか? そういう情報はきちんと書きましょう。条件によって答えが変わってくることを認識しましょう。
退会済みユーザー

退会済みユーザー

2020/03/24 06:27

前のスレッドで、 > データソース構成ウィザードが何なのか分からないので、調査してみます。 とのことでしたが、調査してみましたか? そちらの方向に進んでいれば、たぶんこういう質問は出なかったと想像してます。前にも書きましたが、自己流では茨の道を歩いているようなもので、ゴールにたどり着くのに時間がかかるばかりです。
退会済みユーザー

退会済みユーザー

2020/03/24 06:34

たくさんのアドバイスをいただいて本当にありがたいのですが、データソース構成ウィザードは使わない方向で考えております。 >どういう状況から行を追加しようとしているのですか? データ分しか表示していないので、新しい情報(データ)を追加するのに新規で行を追加しないとユーザーが書き込みなどできないので、そのためです。
退会済みユーザー

退会済みユーザー

2020/03/24 07:36 編集

上の私のコメントの?マークがついているすべての質問に答えてください。特に最初の質問。 目的は何かも。あなたは答えたつもりかもしれませんが、書き込みのあと MySQL への保存とかもあるのだとすると、その書き方では不十分です。
退会済みユーザー

退会済みユーザー

2020/03/24 07:38

すみません。 前のスレッドの続きです。 状況と目的は先程書きました。
退会済みユーザー

退会済みユーザー

2020/03/24 07:40

目的はもっと詳しく書いてください。あなたは答えたつもりかもしれませんが、書き込みのあと MySQL への保存とかもあるのだとすると、その書き方では不十分です。
退会済みユーザー

退会済みユーザー

2020/03/24 07:45 編集

たぶん新規データの追加だけでなく、既存のデータの削除・編集・更新とかもあるのですよね。もしそれが必要なら、小出しにしないで、やりたいことを全部書いてください。
退会済みユーザー

退会済みユーザー

2020/03/24 08:36 編集

内部的な問題(既存のデータの削除・編集・更新・新規保存)は確かにあるのですが、そこに関しては一切まだ手を付けていない状況でして…。 ソースも上げられない状況なのですが、大丈夫でしょうか(-_-;) なので、真っ新な行を追加できればいいのですがその先もとなると一旦閉じた方がいいのかなと ※返信遅くなります
退会済みユーザー

退会済みユーザー

2020/03/24 09:50

質問欄を編集して前のスレッドの URL とその続きであることを書いてください。そして、最終的には、ユーザーが DataGridView の編集操作を行ったあと、その結果を MySQL へ反映することが目的であることも書いてください。これは絶対やってくださいね。
guest

回答1

0

ベストアンサー

内部的な問題(既存のデータの削除・編集・更新・新規保存)は確かにあるのですが

そうであれば、DataGridView に無理やり(今のやり方がそうです)行を追加してそこにユーザーが新しい情報を書き込めるようにしても、次のステップでそのデータを MySQL に INSERT するところで破綻して、元に戻ってやり直しという後戻り工数が発生すると思います。

なので先を睨んで目的が果たせるように考えて進めないとダメです。それは初心者には非常に大変だから、データソース構成ウィザードを使ってやるようお勧めしたのですが・・・

古い記事ですが、以下の記事に目を通してください。とりあえず、図1と図2だけでも見てください。

DB 設計者のための明解 ADO.NET 第 1 回
https://docs.microsoft.com/ja-jp/previous-versions/cc482903(v=msdn.10)?redirectedfrom=MSDN

現状で、図2の DataAdapter の Select と Fill の機能を使って DataSet/DataTable に MySQL からデータを取得し、それを DataGridView にバインドして MySQL のレコード一覧を表示できるようになっているはずです。

MySQL への INSERT, DELETE, UPDATE を行うには、ユーザーが DataGridView を操作するとその結果が図1にあるように DataSet/DataTable に反映されるので、作業が完了したら図2にある DataAdapter の Update メソッドで編集結果一気に MySQL に反映するというのが普通のやり方です。

その実装はデータソース構成ウィザードを使わなくても自力でコードを書いて可能ですが、勉強のためということならともかく、業務で限られた時間と工数の中でそうするのははっきり言ってバカげてると思います。

・・・と言っても始まらないようなので、とりあえず先のスレッド https://teratail.com/questions/247663 の続きとして、そこから行を追加する方法を書いておきます。

まず、DataTable を直接 DataGridView の DataSource に設定するのではなく、先にスレッドで私が書いたコードのように、間に BindingSource を置いてください。

そうすれば、BindingSource.AddNew() メソッドで行が追加できます。

投稿2020/03/24 09:42

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2020/03/24 23:54

回答ありがとうございます。 少し時間がかかりそうですので、少々お待ちください。
退会済みユーザー

退会済みユーザー

2020/03/25 08:25

前のスレッドに書いていただいた中の「private DataTable CreateDataTable()」 の部分なんですが、vb.netにするとどのように書きますでしょうか?
退会済みユーザー

退会済みユーザー

2020/03/25 08:46

変換サービスがあるので利用してください。自助努力でお願いします。 Telerik Code Converter https://converter.telerik.com/
退会済みユーザー

退会済みユーザー

2020/03/26 00:04

変換エラーが出でしまい、できませんでした(-_-;)
退会済みユーザー

退会済みユーザー

2020/03/26 00:14

すみません、Chromeで開いたところできました。 ExPlorerではできないみたいでした。
退会済みユーザー

退会済みユーザー

2020/03/26 00:34

systemformatexceptionセルのフォーマットされた値に間違った方が指定されています。 というエラーがでたので、「https://dobon.net/vb/dotnet/datagridview/dataerror.html」こちらの ’ユーザーがセルに正しくない値を入力した時に、元の値に戻るようにする’ という処置を行ったのですがこれは正しいのでしょうか?
退会済みユーザー

退会済みユーザー

2020/03/26 00:51

何度もすみません、試行錯誤した結果エラーもなく上手くいきました。 ご丁寧にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問