none
DataGridViewのデータをCSV保存と呼出について RRS feed

  • 質問

  • 先日、Form1のTextboxの値をDataGridViewに表示する方法についてご教示いただき実行することができました。
    Visual Basic 勉強中で次の2点についてもご指導いただきたく投稿しました。
    【質問1点目】
        DataGridViewに表示されているデータをCSVで保存しようと下記のコードを行いましたが
        『ハンドルされていない例外。メソッドまたは操作は実装されていませんいません。』となっていしまいます。
        どういうことかよくわかりません、申し訳ないですがご指導お願いします。
     Private Sub Savedata()
            Throw New NotImplementedException()・・・・この部分に出ます。
                                               ・・・・『ハンドルされていない例外。メソッドまたは操作は実装されていませんいません。』
            Dim Form2 As New Form2
            Dim path As String = "登録データ.csv"     '出力ファイル名「登録データ」
            Dim strdata As String                     '1行分のデータ strdata:CSVファイル形式にする
            Dim sw As System.IO.StreamWriter _
                = New System.IO.StreamWriter(path, False, System.Text.Encoding.Default)
            For Each DataGridView1Row _
               In strdata                         
                strdata = TextBox1.Text.ToString() + "," +      '日付
                          TextBox2.Text.ToString() + "," +      '日付(TextBox1とは別の日付)
                          TextBox3.Text.ToString() + "," +      '数字
                          TextBox4.Text.ToString() + "," +      '数字
                          TextBox5.Text.ToString() + "," +      '数字
                          TextBox6.Text.ToString()              '数字
                sw.WriteLine()                  '1行分のデータを出力
            Next
            sw.Close()
        End Sub
    【質問2点目】
    上記で保存したCSVデータの呼出についてです。
    Form1に   TextBox1     '日付
              TextBox2     '日付(TextBox1とは別の日付)
              TextBox3     '数字
              TextBox4     '数字
              TextBox5     '数字
              TextBox6     '数字
    Form2にDataGridView1
             列1      'Form1のTextBox1の日付
             列2      'Form1のTextBox2の日付(TextBox1とは別の日付)
             列3      'Form1のTextBox3数字
             列4      'Form1のTextBox4数字
             列5      'Form1のTextBox5数字
             列6      'Form1のTextBox6数字
    を作成してあります。
    ご指導いただきたいことはForm1のTextBox1に日付を入力したら上記【1点目】で質問させていただいたCSVファイルのデータをDataGridView1に表示し
    列1の日付を検索し該当の列2~列6の値をForm1の各TextBoxに値を戻したいのですがコードの記入についていろいろなQアンドA等参考に調べていますが未だに不明です。
    以上2点についてご教示いただきたくお願いします。
    2018年4月29日 14:42

回答

  • 【質問1点目】について、返答します。

    Private Sub Savedata()
        
        ★意図的に、例外エラーを発生させる命令を書いているから、エラーが出た。
        もしも、インテリセンス経由で「メソッドの生成」をされたのであれば、以下は削除してよし
        わざと、例外エラーを発生させて、処理を停止させたいときに使う命令
        その中でも「このメソッドにまだ処理を実装していないよ」(Not Implemented)「というエラー」(Exception)
        Throw New NotImplementedException()
        
        Dim Form2 As New Form2
        Dim path As String = "登録データ.csv"
        Dim strdata As String
        Dim sw As System.IO.StreamWriter _
            = New System.IO.StreamWriter(path, False, System.Text.Encoding.Default)
        
        ★①For ループの命令の使い方と②StreamWriter の使い方を、まずは覚える必要がある気がする
        For Each DataGridView1Row In strdata
        
            strdata = TextBox1.Text.ToString() + "," +
            TextBox2.Text.ToString() + "," +
            TextBox3.Text.ToString() + "," +
            TextBox4.Text.ToString() + "," +
            TextBox5.Text.ToString() + "," +
            TextBox6.Text.ToString()
            
            sw.WriteLine()
            
        Next
        
        sw.Close()
        
    End Sub
    



    murabou 様の場合、寄り道して(早くプログラムをでかしたい気持ちは伝わってきました!)、プログラミング力を高める必要がある気がしました。偉そうなこと言っちゃいましたけど(嫌な気持ちにさせたらごめんなさい)。

    「分からないこと(不安なこと)」は、できるだけ「小さく」分けて考えることで、心理的な負担が減って楽になれます。さらには「自分が何が分かっていないのか」を「自分で気づく」こともできます。これはお仕事でも同じです。分解して、順番通り1つ1つ解決していきます。並列処理して、一瞬にして同時にすべての問題を解決することは、人間には向いていないです。

    まずは、「VB.NET For Each 使い方」でググって命令の使い方を覚える、「VB.NET  StreamWriter 使い方」でググって命令の使い方を覚える、という修行が必要なように思いました。いわゆる「問題解決能力」っていう力。


    と言っておきながら、教えます(命令の使い方の方)。



    ■For Each の使い方
    「複数のデータが入った変数」の中に入ったデータを、「1つずつ扱いたい」ときに、「ループ命令」を使います。
    ゴミプロ(確認用に作ったプロジェクト、作り捨てのプログラム)作って、動かしてみると、おお!って分かります。

    Dim items As List(Of Integer) = New List(Of Integer) From {1, 2, 3, 4, 5} For Each item As Integer In items Console.WriteLine(item) Next → 使い方は、For Each 【1つ分の変数名】 In 【複数のデータが入った変数名】

    【複数のデータが入った変数名】の中から(In)、【1つ分の変数名】を取り出すよ。





    ■外部ファイルへの書き込み

    文字コードを指定してテキストファイルに書き込む
    https://dobon.net/vb/dotnet/file/writefile.html#section2

    'Shift JISで書き込む、書き込むファイルが既に存在している場合は、上書きする
    Dim sw As New System.IO.StreamWriter("C:\test\1.txt", False, System.Text.Encoding.GetEncoding("shift_jis"))
    
    'TextBox1.Textの内容を書き込む
    sw.Write(TextBox1.Text)
    '閉じる
    sw.Close()


    出力先に指定したパスにテキストファイルが作成されているか?テキストの内容が、思っていた内容と合っていたか?

    2018年4月30日 2:44

すべての返信

  • 【質問1点目】について、返答します。

    Private Sub Savedata()
        
        ★意図的に、例外エラーを発生させる命令を書いているから、エラーが出た。
        もしも、インテリセンス経由で「メソッドの生成」をされたのであれば、以下は削除してよし
        わざと、例外エラーを発生させて、処理を停止させたいときに使う命令
        その中でも「このメソッドにまだ処理を実装していないよ」(Not Implemented)「というエラー」(Exception)
        Throw New NotImplementedException()
        
        Dim Form2 As New Form2
        Dim path As String = "登録データ.csv"
        Dim strdata As String
        Dim sw As System.IO.StreamWriter _
            = New System.IO.StreamWriter(path, False, System.Text.Encoding.Default)
        
        ★①For ループの命令の使い方と②StreamWriter の使い方を、まずは覚える必要がある気がする
        For Each DataGridView1Row In strdata
        
            strdata = TextBox1.Text.ToString() + "," +
            TextBox2.Text.ToString() + "," +
            TextBox3.Text.ToString() + "," +
            TextBox4.Text.ToString() + "," +
            TextBox5.Text.ToString() + "," +
            TextBox6.Text.ToString()
            
            sw.WriteLine()
            
        Next
        
        sw.Close()
        
    End Sub
    



    murabou 様の場合、寄り道して(早くプログラムをでかしたい気持ちは伝わってきました!)、プログラミング力を高める必要がある気がしました。偉そうなこと言っちゃいましたけど(嫌な気持ちにさせたらごめんなさい)。

    「分からないこと(不安なこと)」は、できるだけ「小さく」分けて考えることで、心理的な負担が減って楽になれます。さらには「自分が何が分かっていないのか」を「自分で気づく」こともできます。これはお仕事でも同じです。分解して、順番通り1つ1つ解決していきます。並列処理して、一瞬にして同時にすべての問題を解決することは、人間には向いていないです。

    まずは、「VB.NET For Each 使い方」でググって命令の使い方を覚える、「VB.NET  StreamWriter 使い方」でググって命令の使い方を覚える、という修行が必要なように思いました。いわゆる「問題解決能力」っていう力。


    と言っておきながら、教えます(命令の使い方の方)。



    ■For Each の使い方
    「複数のデータが入った変数」の中に入ったデータを、「1つずつ扱いたい」ときに、「ループ命令」を使います。
    ゴミプロ(確認用に作ったプロジェクト、作り捨てのプログラム)作って、動かしてみると、おお!って分かります。

    Dim items As List(Of Integer) = New List(Of Integer) From {1, 2, 3, 4, 5} For Each item As Integer In items Console.WriteLine(item) Next → 使い方は、For Each 【1つ分の変数名】 In 【複数のデータが入った変数名】

    【複数のデータが入った変数名】の中から(In)、【1つ分の変数名】を取り出すよ。





    ■外部ファイルへの書き込み

    文字コードを指定してテキストファイルに書き込む
    https://dobon.net/vb/dotnet/file/writefile.html#section2

    'Shift JISで書き込む、書き込むファイルが既に存在している場合は、上書きする
    Dim sw As New System.IO.StreamWriter("C:\test\1.txt", False, System.Text.Encoding.GetEncoding("shift_jis"))
    
    'TextBox1.Textの内容を書き込む
    sw.Write(TextBox1.Text)
    '閉じる
    sw.Close()


    出力先に指定したパスにテキストファイルが作成されているか?テキストの内容が、思っていた内容と合っていたか?

    2018年4月30日 2:44
  • 早速ご回答頂きながら返信遅くなり申し訳ありませんでした。ご指摘の通りこれから勉強し作業を進めていきます。ありがとうございました。
    2018年4月30日 11:54
  • 自分で調べろと言いましたが、初心者なら、なおさら周りを巻き込んで、やり方を見て覚える・成長するための権利も持っているものだと思います。

    (別スレッドも拝見して)何度も謝られていらっしゃいますが(ではなく謙虚で素直な方なだけか)、気にせずこれからも利用して、技術力を磨いていただきたく思います。

    言ってることが矛盾していますが、自分で解決できる力、自分では力不足と認めて周りに教えてもらう力(聞く勇気)、どちらも必要なものなのです。

    どうしても分からなかった場合は、遠慮せず、もう一度質問してきてください。

    2018年5月3日 12:03