トップ回答者
DataGridViewへの行追加保存について

質問
-
フォーム1に
処理日.Text
取扱日.Text
値1.Text
値2.Text
値3.Text
のテキストボックスがあります。
データ転記ボタンをクリックするとフォーム2(データ保存シート2)のDataGridView1にテキストボックスの内容が転記されますが
テキストボックスの値を変えてデータ転記ボタンをクリックするとDataGridView1に転記されますが最初のデータに
上書きされてしまいます。最初のデータは残していき次行(データ更新の都度)へデータを転記させて行きたいのですがコードがわかりません。
ご指導お願いします。「現行コード」
Private Sub データ転記_Click(sender As Object, e As EventArgs) Handles データ転記.ClickDim f As データ保存シート2
f = New データ保存シート2f.DataGridView1.Rows.Add(Me.処理日.Text, Me.取扱日.Text, Me.値1.Text, Me.値2.Text, Me.値3.Text)
f.ShowDialog(Me)
End Sub
回答
-
f = New データ保存シート2 としているので、データ転送ボタンを押す度にデータ保存シート2が作成されてしまいます。
Newは新たにインスタンスを作成する命令です。インスタンスとはデータ保存シート2の分身です。つまり、、データ転送ボタンを押す度にデータ保存シート2の分身が作られ、DataGridView1に最初の1行を追加されて、テキストボックスの値がセットされることになります。この問題を解決するには、データ保存シート2のインスタンス(分身)を最初に作ったら、それを使いまわすことです。Newで新たなデータ保存シート2のインスタンス(分身)を作ってはいけません。以下のようにしてみて下さい。
Dim f As データ保存シート2 Private Sub Bttn_例外まとめて補足_Click(sender As Object, e As EventArgs) Handles Bttn_例外まとめて補足.Click If f Is Nothing Then f = New データ保存シート2() End If f.DataGridView1.Rows.Add(Me.処理日.Text, Me.取扱日.Text, Me.値1.Text, Me.値2.Text, Me.値3.Text) f.ShowDialog(Me) End Sub
上記のように常にインスタンスを1つしか作らないデザインパターンをシングルトンと呼びます。★良い回答には質問者は回答済みマークを、閲覧者は投票を!
- 回答としてマーク 立花楓Microsoft employee, Moderator 2018年5月8日 2:47
-
まず、自分の書かれたコードの意味を100%完全に理解するようにして下さい。他からコードを持ってきてもいいですが、そのコードの意味を100%理解して下さい。
Dim swText As New System.IO.StreamWriter(strFileName,
False, System.Text.Encoding.GetEncoding(932))と、書かれていますが、2番目に引数のFalseが何を意味するのかわかりますでしょうか? 答えはそこにあります。
ファイルにテキストを書き込むには?[C#、VB]
http://www.atmarkit.co.jp/ait/articles/0711/08/news119.html#上記の追加の質問は、このスレッドのタイトルから外れていないと判断しましたが、新たに質問を始める場合は、基本的に新たにスレッドを立てるようにお願いいたします。
★良い回答には質問者は回答済みマークを、閲覧者は投票を!
- 回答としてマーク 立花楓Microsoft employee, Moderator 2018年5月8日 2:51
すべての返信
-
f = New データ保存シート2 としているので、データ転送ボタンを押す度にデータ保存シート2が作成されてしまいます。
Newは新たにインスタンスを作成する命令です。インスタンスとはデータ保存シート2の分身です。つまり、、データ転送ボタンを押す度にデータ保存シート2の分身が作られ、DataGridView1に最初の1行を追加されて、テキストボックスの値がセットされることになります。この問題を解決するには、データ保存シート2のインスタンス(分身)を最初に作ったら、それを使いまわすことです。Newで新たなデータ保存シート2のインスタンス(分身)を作ってはいけません。以下のようにしてみて下さい。
Dim f As データ保存シート2 Private Sub Bttn_例外まとめて補足_Click(sender As Object, e As EventArgs) Handles Bttn_例外まとめて補足.Click If f Is Nothing Then f = New データ保存シート2() End If f.DataGridView1.Rows.Add(Me.処理日.Text, Me.取扱日.Text, Me.値1.Text, Me.値2.Text, Me.値3.Text) f.ShowDialog(Me) End Sub
上記のように常にインスタンスを1つしか作らないデザインパターンをシングルトンと呼びます。★良い回答には質問者は回答済みマークを、閲覧者は投票を!
- 回答としてマーク 立花楓Microsoft employee, Moderator 2018年5月8日 2:47
-
trapemiyaさん、DataGridView1に複数行のデータが表示される用になりましたできました、ありがとうございました。さらにこのDataGridView1データをCSVで保存しておき
次回新たにデータをインプットしたときにCSVで保存するとCSVファイルが上書きされてしまい新たに入力したデータしかCSVファイルに表示されません。
以前のデータは残していき次行(データ更新の都度)へデータを保存させて行きたいのですがコードがわかりません。勉強中で下記のようなコードを作成してみました。
ご指導お願いします。現行コード
Public Sub Savedata()
Dim i As Integer
Dim j As Integer
Dim strFileName As String
Dim strResult As New System.Text.StringBuilder
If Me.sfdCsvFile.ShowDialog = Windows.Forms.DialogResult.OK Then
End IfFor i = 0 To DataGridView1.Columns.Count - 1
Select Case i
Case 0
strResult.Append("""" &
DataGridView1.Columns(i).HeaderText.ToString & """")Case DataGridView1.Columns.Count - 1
strResult.Append("," & """" & DataGridView1.Columns(i).HeaderText.ToString & """" & vbCrLf)Case Else
strResult.Append("," & """" & DataGridView1.Columns(i).HeaderText.ToString & """")
End SelectNextFor i = 0 To DataGridView1.Rows.Count - 2
For j = 0 To DataGridView1.Columns.Count - 2
Select Case j
Case 0
strResult.Append("""" & DataGridView1.Rows(i).Cells(j).Value.ToString & """")Case DataGridView1.Columns.Count - 2
strResult.Append("," & """" & DataGridView1.Rows(i).Cells(j).Value.ToString & """" & vbCrLf)Case Else
strResult.Append("," & """" & DataGridView1.Rows(i).Cells(j).Value.ToString & """")
End SelectNext
Next
strFileName = Me.sfdCsvFile.FileName
'Shift-JISで保存します。
Dim swText As New System.IO.StreamWriter(strFileName,
False, System.Text.Encoding.GetEncoding(932))
swText.Write(strResult.ToString)
swText.Dispose()End Sub -
まず、自分の書かれたコードの意味を100%完全に理解するようにして下さい。他からコードを持ってきてもいいですが、そのコードの意味を100%理解して下さい。
Dim swText As New System.IO.StreamWriter(strFileName,
False, System.Text.Encoding.GetEncoding(932))と、書かれていますが、2番目に引数のFalseが何を意味するのかわかりますでしょうか? 答えはそこにあります。
ファイルにテキストを書き込むには?[C#、VB]
http://www.atmarkit.co.jp/ait/articles/0711/08/news119.html#上記の追加の質問は、このスレッドのタイトルから外れていないと判断しましたが、新たに質問を始める場合は、基本的に新たにスレッドを立てるようにお願いいたします。
★良い回答には質問者は回答済みマークを、閲覧者は投票を!
- 回答としてマーク 立花楓Microsoft employee, Moderator 2018年5月8日 2:51