none
データバインディングされたデータグリッドビューの行追加について RRS feed

  • 質問

  • <使用環境>

    windowsXP

    VB2005 EE

    こんにちは。今回もよろしくお願いします。

     

    2つのデータグリッドビューをwindowsフォーム上に配置したとして、Adatagridviewは、masterテーブルがバインディングされており、datagridview1にて選択された行のデータをdatagridview2に出力させたいと思っています。(選択された行のデータは、一旦各テキストボックスに出力するようにしています。)

    その際、下記コードにて出力はできるのですが、バインディングされたデータグリッドビューは行追加が出来ないと表示されます。バインディングされたdatagridviewの行追加をする良い方法はないでしょうか?

     

            Dim selectedRowCount As Integer = _
                   DataGridView2.Rows.GetRowCount(DataGridViewElementStates.Selected)

            DataGridView2(0, selectedRowCount).Value = TextBox2.Text
            DataGridView2(2, selectedRowCount).Value = TextBox3.Text
            DataGridView2(4, selectedRowCount).Value = TextBox4.Text
            DataGridView2.Rows.Add()

    2007年5月18日 4:04

回答

  • 次のようなコードを実行すれば行が追加されますが、このようなことでしょうか?

     

    Code Snippet

            Dim Table As DataTable = DataGridView2.DataSource

            Dim dr As DataRow = Table.NewRow()

            dr("コード") = "10"

            dr("費目") = "ほげ"

            dr("工種") = "ふが"

            dr("規格") = "もげ"

            dr("単位") = "ふー"

            dr("数量") = "5"

            dr("単価") = "10,000"

            dr("合計") = "50,000"

            dr("適用") = "OK"

            dr("備考") = "適正"

            Table.Rows.Add(dr)

     

    2007年5月19日 15:37
    モデレータ

すべての返信

  • バインディングされたデータグリッドビューであれば、バインド元になっているデータソースに追加すれば良いと思います。バインド元になっているデータソースに行を追加すれば、それを自動でデータグリッドビューに通知できる種類のものであれば、データソースに行を追加するだけで、データグリッドビューにも表示されます。
    2007年5月18日 15:47
    モデレータ
  • 以前のスレッドで、データセットを使用しないで・・・という考えに至ったのですが、やはりその都度作成するデータベースのテーブルをデータグリッドビューのデータソースに割り当てるとなると、データソースを使わざる得ないようですね。

    やりたいことを簡潔に書きます。尚、これらは下記コード(test)にて示しています。

     

    1、windowsフォーム上の新規作成ボタンにて、任意の名前のデータベースを作成。その際のテーブル構造

      は、meisai_masterというテーブルで構成。

    2、windowsフォーム上のdatagridview2.datasourceに1で新規作成したデータベースのテーブル

      ”meisai_master”を割り当てる。

    3、ある任意のテキストを、配置されたボタンにてdatagridview2の選択行に入力させる。

     ※しかし、先に述べたとおり"meisai_master"をdatagridview2に割り当てているため、行追加を実行

       出来ない為テキストを出力させることが出来ない。その際、データソースを使った行追加法を知りた 

       い。

     

    これらの工程は、全てプログラム上で行っています。データセットを作成するには、デザイナ等を使用したことがありません。今回は、データベースのディレクトリ先が変更する可能性があるため、windowsフォーム上のテキストボックス等でディレクトリ先を決定しています。そこで、デザイナを使用せずにプログラム上だけでデータソースによるデータグリッドビューの行追加法を教えて頂きたいのです。ちなみにデザイナを使用した方法は、データセットとバインディングソースを使っていました。

    基本的な部分として、プログラム上で上記のような方法に対してデータセットを作成するには、データセットを宣言して、そのデータセットにmeisai_masterを当てたdatagridview2を入力するのでしょうけど、実際のコーディングがいまいち分かりません。出来れば下記コードを利用してご教授いただけないでしょうか?下記コードの考え方自体がおかしい場合も指摘してもらってかまいませんので、よろしくお願いします。

     

    Sub test()
            '新規データベース作成
            Dim cat As Object
            cat = CreateObject("ADOX.Catalog")
            cat.Create("Provider=Microsoft.Jet.OLEDB.4.0;" & _
                   "Data Source=" & AddressTextBox.Text & "\" & YearComboBox.Text & "\" & TextBox1.Text & ".mdb")

            'テーブル作成
            Dim strTable As String
            Dim tbl As Object
            tbl = CreateObject("ADOX.TABLE")
            strTable = "meisai_master"
            tbl.Name = strTable
            cat.Tables.Append(tbl)
            With cat.Tables(strTable)
                .Columns.Append("Code")
                .Columns.Append("Himoku")
                .Columns.Append("Kosyu")
                .Columns.Append("Suppli")
                .Columns.Append("Unit")
                .Columns.Append("Num")
                .Columns.Append("UnitPrice")
                .Columns.Append("TotalPrice")
                .Columns.Append("Used")
                .Columns.Append("Remarks")
            End With

            Dim Cn As New OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & AddressTextBox.Text & "\" & YearComboBox.Text & "\" & TextBox1.Text & ".mdb")
            Dim SQLCm As OleDb.OleDbCommand = Cn.CreateCommand
            SQLCm.CommandText = "SELECT Code as コード , Himoku as 費目 , Kosyu as 工種 , Suppli as 規格 , Unit as 単位 , Num as 数量 , UnitPrice as 単価 , TotalPrice as 合計 , Used as 適用 , Remarks as 備考 FROM meisai_master"
            Dim Adapter As OleDb.OleDbDataAdapter
            Adapter = New OleDb.OleDbDataAdapter(SQLCm)
            Dim Builder As New OleDb.OleDbCommandBuilder(Adapter)
            Dim Table As New DataTable
            Adapter.Fill(Table)
            DataGridView2.DataSource = Table
        End Sub

    2007年5月19日 14:18
  • 次のようなコードを実行すれば行が追加されますが、このようなことでしょうか?

     

    Code Snippet

            Dim Table As DataTable = DataGridView2.DataSource

            Dim dr As DataRow = Table.NewRow()

            dr("コード") = "10"

            dr("費目") = "ほげ"

            dr("工種") = "ふが"

            dr("規格") = "もげ"

            dr("単位") = "ふー"

            dr("数量") = "5"

            dr("単価") = "10,000"

            dr("合計") = "50,000"

            dr("適用") = "OK"

            dr("備考") = "適正"

            Table.Rows.Add(dr)

     

    2007年5月19日 15:37
    モデレータ
  • ありがとうございました。無事、行追加できました。

    それに伴い、また質問点が出てきましたので、別スレッドにて質問させていただきます。

    2007年5月20日 14:47