none
テキストボックスの値をデータテーブルへ反映させるには RRS feed

  • 質問

  • Visual Basic2017習得中です。 初めて投稿します。
    Form1にTextbox1~Textbox5まで5個作成し、これらに入力した値をボタンをクリックしたときにデータテーブルの項目1~項目5に反映させフォーム2に作成したDataGridViewに表示したいです。
    質問内容を検索し調べたのですがいずれも内容がデータ検索から印刷までなど複雑な内容で自分では理解できませんでした。大変申し訳ありませんがどなたかよろしくお願いします。
    2018年4月28日 13:39

回答

  • 簡単な手順は以下のようになります。

    Public Class Form1
    
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    
            'プロジェクトにTestDataSetという名前のDataSetが定義されているとします。
            'TestDataSetにTestDataTableという名前のDataTableが定義されているとします
            'TestDataTableに項目1,項目2,項目3,項目4,項目5という列が定義されているとします。
            '項目1~項目5までのDataTypeプロパティはStringとします。
            'Form1にツールボックスからDataSetをD&Dして上記TestDataSetを選んでいるとします(名前はTestDataSet1となっているとします)
    
            Dim table = Me.TestDataSet1.TestDataTable 'データを入れるDataTableを選びます
            Dim row = table.NewTestDataTableRow() 'データを入れるために新しい行を作ります(デザイナでDataSetを作っていればNew~という関数はテーブル名から自動で作られます)
            'row= table.Rows(1) 既に追加済みの場合はRowsプロパティで選ぶこともできます
    
            Try
                '行の中の列に対応するTextBoxから文字列を設定します
                'DataSetデザイナでDataTablを作っていれば列名がそのまま使えます
                row.項目1 = TextBox1.Text
                row.項目2 = TextBox2.Text
                row.項目3 = TextBox3.Text
                row.項目4 = TextBox4.Text
                row.項目5 = TextBox5.Text
    
            Catch ex As InvalidCastException
                MessageBox.Show(ex.Message)'項目1~5にStringではない列があって、文字列から変換できない場合はエラーになります。
                return
            End Try
    
            table.Rows.Add(row) 'NewTestDataTableRowのように新規に行を作った場合は設定し終わった行をテーブルに追加します。Rowsで既存の行の場合は2重つに追加できないのでAddしないようにします。
    
            Dim frm2 As New Form2 'Form2にはDataGridView1という名前のDataGridViewが配置されているとします
            frm2.DataGridView1.DataSource = table 'DataGridViewの表示するデータをDataTableにします(DataGridView1とう名前が見えない場合ModifiresプロパティをPoublicがFriendにします。
    
            frm2.ShowDialog() 'Form2を表示します
        End Sub
    
    End Class



    個別に明示されていない限りgekkaがフォーラムに投稿したコードにはフォーラム使用条件に基づき「MICROSOFT LIMITED PUBLIC LICENSE」が適用されます。(かなり自由に使ってOK!)

    2018年4月28日 14:47
  • こんばんは、

    DataGridView は特定のデータソースをもとに開発することもできますが、ここでは独自に列情報を定義する方法で回答します。例えば、下図のように、フォーム2 に2つの列をあらかじめ定義しておきます。

    次に、フォーム1 のボタンが押されたときのイベントに、フォーム2 がもつ DataGridView の Rows プロパティに対して、フォーム1 のテキストボックスの内容を Add メソッドで追加していきます。次の例では 2列ずつ、3行追加しています。

    Public Class Form1
    
        Private Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
            Dim f As Form2
            f = New Form2
            f.DataGridView1.Rows.Add(Me.TextBox1.Text, Me.TextBox2.Text)
            f.DataGridView1.Rows.Add(Me.TextBox3.Text, Me.TextBox4.Text)
            f.DataGridView1.Rows.Add(Me.TextBox5.Text, "")
            f.ShowDialog(Me)
        End Sub
    End Class

    この例が、うまく動作すると次のスクリーンショットのようになるはずです。開発されているアプリケーションの目的に添えるかはわかりませんが、ご参考になれば幸いです。


    充実した連休をお過ごしください、


    --- Seiji Momoto

    2018年4月28日 15:37

すべての返信

  • 簡単な手順は以下のようになります。

    Public Class Form1
    
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    
            'プロジェクトにTestDataSetという名前のDataSetが定義されているとします。
            'TestDataSetにTestDataTableという名前のDataTableが定義されているとします
            'TestDataTableに項目1,項目2,項目3,項目4,項目5という列が定義されているとします。
            '項目1~項目5までのDataTypeプロパティはStringとします。
            'Form1にツールボックスからDataSetをD&Dして上記TestDataSetを選んでいるとします(名前はTestDataSet1となっているとします)
    
            Dim table = Me.TestDataSet1.TestDataTable 'データを入れるDataTableを選びます
            Dim row = table.NewTestDataTableRow() 'データを入れるために新しい行を作ります(デザイナでDataSetを作っていればNew~という関数はテーブル名から自動で作られます)
            'row= table.Rows(1) 既に追加済みの場合はRowsプロパティで選ぶこともできます
    
            Try
                '行の中の列に対応するTextBoxから文字列を設定します
                'DataSetデザイナでDataTablを作っていれば列名がそのまま使えます
                row.項目1 = TextBox1.Text
                row.項目2 = TextBox2.Text
                row.項目3 = TextBox3.Text
                row.項目4 = TextBox4.Text
                row.項目5 = TextBox5.Text
    
            Catch ex As InvalidCastException
                MessageBox.Show(ex.Message)'項目1~5にStringではない列があって、文字列から変換できない場合はエラーになります。
                return
            End Try
    
            table.Rows.Add(row) 'NewTestDataTableRowのように新規に行を作った場合は設定し終わった行をテーブルに追加します。Rowsで既存の行の場合は2重つに追加できないのでAddしないようにします。
    
            Dim frm2 As New Form2 'Form2にはDataGridView1という名前のDataGridViewが配置されているとします
            frm2.DataGridView1.DataSource = table 'DataGridViewの表示するデータをDataTableにします(DataGridView1とう名前が見えない場合ModifiresプロパティをPoublicがFriendにします。
    
            frm2.ShowDialog() 'Form2を表示します
        End Sub
    
    End Class



    個別に明示されていない限りgekkaがフォーラムに投稿したコードにはフォーラム使用条件に基づき「MICROSOFT LIMITED PUBLIC LICENSE」が適用されます。(かなり自由に使ってOK!)

    2018年4月28日 14:47
  • こんばんは、

    DataGridView は特定のデータソースをもとに開発することもできますが、ここでは独自に列情報を定義する方法で回答します。例えば、下図のように、フォーム2 に2つの列をあらかじめ定義しておきます。

    次に、フォーム1 のボタンが押されたときのイベントに、フォーム2 がもつ DataGridView の Rows プロパティに対して、フォーム1 のテキストボックスの内容を Add メソッドで追加していきます。次の例では 2列ずつ、3行追加しています。

    Public Class Form1
    
        Private Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
            Dim f As Form2
            f = New Form2
            f.DataGridView1.Rows.Add(Me.TextBox1.Text, Me.TextBox2.Text)
            f.DataGridView1.Rows.Add(Me.TextBox3.Text, Me.TextBox4.Text)
            f.DataGridView1.Rows.Add(Me.TextBox5.Text, "")
            f.ShowDialog(Me)
        End Sub
    End Class

    この例が、うまく動作すると次のスクリーンショットのようになるはずです。開発されているアプリケーションの目的に添えるかはわかりませんが、ご参考になれば幸いです。


    充実した連休をお過ごしください、


    --- Seiji Momoto

    2018年4月28日 15:37
  • 早速のご指導ありがとうございました。できました、これで次へ進むことができそうです、本当にありがとうございました。
    2018年4月29日 4:04
  • 早速のご指導ありがとうございました。このようなやり方があるのですね勉強になります、この方法も実行してみたら順調に進みました。本当にありがとうございました。
    2018年4月29日 4:06
  • 質問者さんへ>

    自分の回答に「回答としてマーク」を付けるのは、ホントにそれが回答になっているならともかく、今回はそうではないので、常識的に考えてオカシイということは分かりませんか?

    2018年4月29日 8:06
  • よくわかっていなくて申し訳ありませんでした
    2018年4月29日 13:51