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

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

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

VB(ビジュアルベーシック)はマイクロソフトによってつくられたオブジェクト指向プログラミング言語のひとつで、同社のQuickBASICが拡張されたものです。VB6の進化版といわれています。

VB.NET

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

Q&A

解決済

1回答

12271閲覧

[VB.NET]DataGridViewで表示したデータを編集し、更新する方法がわかりません。。

退会済みユーザー

退会済みユーザー

総合スコア0

VB

VB(ビジュアルベーシック)はマイクロソフトによってつくられたオブジェクト指向プログラミング言語のひとつで、同社のQuickBASICが拡張されたものです。VB6の進化版といわれています。

VB.NET

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

0グッド

0クリップ

投稿2020/07/14 03:46

前提・実現したいこと

VisualBasicのDataGridViewでデータを表示しているのですが、表示したデータを変更し、更新してデータベースにも反映させる方法がわかりません。

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

該当のソースコード

下記でグリッド内にデータを表示しています。

VB

1If Not DateLabel.Text = Today Or DateLabel.Text = Today Then 2 DataGridView1.Rows.Clear() 3 Dim serverName As String = "" 4 Dim dataBase As String = "" 5 Dim userid As String = "" 6 Dim pwd As String = "" 7 Dim dread As SqlClient.SqlDataReader 8 ' Dim str As String = String.Empty 9 Try 10 Using co As New SqlClient.SqlConnection() 11 co.ConnectionString = 12 " Data Source = " & serverName & 13 ";Initial Catalog = " & dataBase & 14 ";User ID = " & userid & 15 ";Password =" & pwd 16 co.Open() 17 Using cmd As New SqlClient.SqlCommand() 18 cmd.Connection = co 19 cmd.CommandText = 20 "SELECT * " & ControlChars.NewLine & 21 "FROM Test3 " & ControlChars.NewLine & 22 "WHERE Date = '" & DateLabel.Text & "' AND ODNOKBNN = '" & CM0000.login_Pass & "' AND DLTFLG = 0" & ControlChars.NewLine 23 dread = cmd.ExecuteReader() 24 25 Do While dread.Read() 26 Dim iIdx As Integer 27 Dim ODNO As String, SGB As String, Syagai As String, MoveTime As String, SagyoPlace As String, StartTime As String, StopTime As String, BreakTime As String, Biko As String 28 iIdx = dread.GetOrdinal("ODNO") 29 ODNO = dread(iIdx) 30 iIdx = dread.GetOrdinal("SGB") 31 SGB = dread(iIdx) 32 iIdx = dread.GetOrdinal("Syagai") 33 Syagai = dread(iIdx) 34 iIdx = dread.GetOrdinal("MoveTime") 35 MoveTime = dread(iIdx) 36 iIdx = dread.GetOrdinal("SagyoPlace") 37 SagyoPlace = dread(iIdx) 38 iIdx = dread.GetOrdinal("StartTime") 39 StartTime = dread(iIdx) 40 iIdx = dread.GetOrdinal("StopTime") 41 StopTime = dread(iIdx) 42 iIdx = dread.GetOrdinal("BreakTime") 43 BreakTime = dread(iIdx) 44 iIdx = dread.GetOrdinal("Biko") 45 Biko = dread(iIdx) 46 47 DataGridView1.Rows.Add(ODNO, "", SGB, Syagai, MoveTime, SagyoPlace, StartTime, "", StopTime, BreakTime, Biko) 48 Loop 49 End Using 50 End Using 51 52 Catch ex As Exception 53 54 End Try 55 EndIf

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

Visual Studio2017,SQL Server

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

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

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

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

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

tosi

2020/07/14 05:29 編集

参考程度です。過去に下記URLで似た回答したことがあります。 データベースはMySQL。 https://teratail.com/questions/265798 (その後、上手く行ったか結果ないので参考程度)
guest

回答1

0

ベストアンサー

VisualBasicのDataGridViewでデータを表示しているのですが、表示したデータを変更し、更新してデータベースにも反映させる方法がわかりません。

前のスレッド https://teratail.com/questions/277029 での私の回答は役に立たなかったですか?

【2020/07/14 14:53 追記】

DB から取得したデータを DataGridView のセルに直接入れて表示し、それをユーザーが編集して結果を DB に反映しようと考えているのですよね?

そうだとするとそれはまったくの悪手です。それで進めていても多分ゴールにたどり着けないと思います。

DataGridView などを UI として非接続型のデータ更新を行う場合は、

DataGridview ⇔ BindingSource / BindingNavigator ⇔ DataSet / DataTable ⇔ DataAdapter ⇔ SQL Server

・・・と言う構造にするのが普通です。すなわち、前のスレッドで紹介した以下の記事の図の構成です。

Windows フォーム アプリケーションでのデータへの接続
https://docs.microsoft.com/ja-jp/previous-versions/wxt2cwcc(v=vs.120)

何故かと言うと・・・

以下の記事の「非接続型のデータ更新」のセクションの図1と図2を見てください。文章は読まなくてもいいので図だけ見てください。

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

図2の DataSet 右側に BindingSource / BindingNavigator 経由で DataGridView が接続されていると思ってください。

ユーザーが DataGridView を操作(行の削除・追加・訂正)した結果は図1にあるように DataSet / DataTable に反映されます。

ユーザーの編集操作が終わったら Update メソッドで図1の編集結果が一度に DB に反映されます。

そういう風にできているのです。

質問者さんは図2の DataSet, DataAdapter なしでアプリを作ろうとしているのです。それではうまくできるはずがありません。

投稿2020/07/14 03:52

編集2020/07/14 06:02
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

退会済みユーザー

退会済みユーザー

2020/07/14 03:55

現在作成しているものは勉強のためにもあまり変えずに作成しております。 せっかく教えていただいたにもかかわらず申し訳ございません。
退会済みユーザー

退会済みユーザー

2020/07/14 04:05 編集

> 現在作成しているものは勉強のためにもあまり変えずに作成しております。 それはそれで勉強にはなるかもしれませんが、一度、紹介した記事の通りやってみたら目から鱗で、なんて無駄なことをしていたんだと思うかもしれません。(余計なお世話と思っておられるかもしれませんが、ホントに、一度やってみることをお勧めします。DataSet / DataTable + DataAdapter を使っての非接続型アクセスの基本を学ぶことは重要で、必ず今後の役に立つと思います)
退会済みユーザー

退会済みユーザー

2020/07/14 07:03

ありがとうございます! 現在、ウィザードで作り直している最中ですが、一覧表示から条件を絞って表示することは可能でしょうか? またそのやり方を教えていただけると幸いです。
退会済みユーザー

退会済みユーザー

2020/07/14 07:17

ウィザードベースで作って一覧表示するところまでは完成したのでしょうか? で、条件を絞ってとはどういうことですか? 別に新しいスレッドを立てて、どこまでできたのか、それからどうしたいのかを書いて質問してもらった方がよさそうです。
退会済みユーザー

退会済みユーザー

2020/07/14 08:45

完成はしたのですが、テキストボックス内の内容に応じて検索条件を絞ってGrid表示したいのですが、一覧表示のまま変化がありません。 条件を絞って検索は可能なのでしょうか?
退会済みユーザー

退会済みユーザー

2020/07/14 09:20

> 条件を絞って検索は可能なのでしょうか? 可能だと思いますが、どのようにしたいのかによります。斜め上のことを考えられていては無理でしょうし・・・ 具体的に書いてください。それが分からないと何とも言えません。コメント欄には書ききれないでしょうから、新しくスレッドを立ててそれにできるだけ具体的に書くようお勧めします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問