VB2005のデータグリッドビューとデータテーブルについて

このQ&Aのポイント
  • VB2005のデータグリッドビューやデータテーブルについて教えてください
  • データテーブルからデータグリッドビューへの表示と値の変更について解説します
  • データテーブルとデータグリッドビューの関連性について詳しく教えてください
回答を見る
  • ベストアンサー

VB2005のデータグリッドビューとデータテーブルについて

いつもお世話になっています。 独学でVBの勉強をしているのですが、 どうしてもわからないことがあるので教えて下さい。 現在行なおうとしていることは、 mdbからデータテーブルにレコードを取得して、 それをデータグリッドビューに設定し、 値の一部をコードで変更するということです。 DataGridView1.DataSource = DataTable1 とすれば、データテーブルのデータを データグリッドビューにて表示させることができるのですが、 コードでデータグリッドビューの値を変更すると、 データテーブルの値も一緒に変更されてしまうんです。 DataGridView1.DataSource = DataTable1.Clone とすると、今度はレコードが表示されなくなってしまって・・・ 何か良い方法がありましたら、教えて下さい。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

DataTable1.Cloneは テーブルの構造とキーの制約のコピーを返す物なので中身はなくなってしまいますよ 編集用のDataTableを準備してこちらをGridのDataSourceに設定してみましょう dim dt2 as DataTable = DataTable1.Clone dim r2 as DataRow dim r1 as DataRow for each r1 in DataTable1.Rows   r2 = dt2.NewRow   r2.ItemArray = r.ItemArray   dt2.Rows.Add( r2 ) next DataGridView1.DataSource = dt2 といった具合です …

tadasuke2002
質問者

お礼

返答ありがとうございます。 Cloneは自分でもよくわかっていなかったんですけど、 テーブルの構造だけをコピーするものだったんですね。 自分なりにいろいろ調べた結果、 DataGridView1.DataSource = DataTable1.Copy とやれば、とりあえず自分のやりたいことはできました。 まだまだ勉強が足りていないことばかりなので、 redfox63さんが教えて下さった方法でも試してみます。 本当にありがとうございました。

関連するQ&A

  • vb.net datagridviewの列位置変更

    vb.net datagridviewの列位置を変更する方法を教えて下さい。 データグリッドビューにDataTable(DBから抽出したデータ)を割り当てました。 DataGridView1.DataSource = DataTable1 ここに、カラムを追加しました Dim column As New DataGridViewButtonColumn() '列の名前を設定 column.Name = "Button" '全てのボタンに"詳細閲覧"と表示する column.UseColumnTextForButtonValue = True column.Text = "詳細閲覧" 'DataGridViewに追加する DataGridView1.Columns.Add(column) この追加したカラムを一番左に表示したいです。

  • Datagridviewで例外

    データベースよりデータ抽出しDatatableにセットしデータグリッドビューのDatasourceにセットしてデータ表示しております。 以下のような制御を実施するとデータが表示されない事象が致しました。 大変お手数お掛けいたしますが何か解決策が分かる方がいらっしゃいましたらご教授頂けないでしょうか。 (1)データベースよりデータ抽出しDatatable(dt1)にセット (2)データグリッドビューのDatasourceにセット→データが表示される (3) (1)のデータテーブルにDatatable.Select(抽出条件) (4)別のデータテーブル(dt2)に(3)の結果をCopyToDataTable (5)データグリッドビューのDatasourceにセット→何も表示されない

  • VB2005 DataGrdViewで、SQL文記述

    VB6からVB2005に切り替える作業をしています。 DataGridViewにMDBファイルの中身を表示させることは出来ました。 DataSet,BindingSourceを用いています。 コードの記述で、SQLの文章を変更させたいのです。 WHERE文の記述を変えたりしたいのですが。 DataSourceにSQL文を記入することが出来ません。 DataSourceには記述できないのでしょうか? それとも、根本的に間違っているのでしょうか。 よろしくお願いいたします。

  • データグリッドビューの表示時

    VB.NET(VS2010)で開発しています。 データグリッドビューで複数行のデータを表示する際に1レコードずつ フィールド(カラム?)の値を確認して、それによってデータグリッドビューの あるフィールドを非表示にしたり罫線を消したり又は太字にしたりすることは 可能でしょうか?

  • DataSetの複数テーブルをひとつのDataGridViewでまとめて出したい

    こんにちは、いつも参考にさせていただいています。 VS2005のC#で制作しているのですが、 ひとつのデータセットの中に3つのテーブルがあります。 そのテーブル全てをデータグリッドビューでだしたいのですが、 ひとつのテーブルしか上手に出ません。 3つのテーブルをひとつのグリッドビューに出す方法を教えてください。 現状は以下のコードで一つのテーブルだけ表示しています。 dv = new DataView(dataset.Tables["data"], "", "", DataViewRowState.CurrentRows); dataGridView1.DataSource = dv;

  • データグリッドビューの一覧に無いファイルの検出

    VB2008・WINXP環境で、acsessのMDBファイルを読み込み、データグリッドビューにファイル名を表示、データグリッドビューをクリックすると指定フォルダのPDFファイルを展開というシステムを作っています。 使っていると、指定フォルダのPDFファイルの数とデータグリッドビューの表示件数(MDBのレコード件数)と合わなくなってきます。 指定フォルダの中からデータグリッドビューの一覧に無いものを検出する方法はあるでしょうか? 色々調べたり考えたりしたのですが、わかりません。 よろしくお願いします。

  • C# DataGridViewにデータを追加したい。

    C# DataGridViewにデータを追加したい。 DataGridViewにレコードを追加したいのですが、Formのロードイベントで以下コードを実行しています。 // テーブルを作成 DataSet dataSet1 = new DataSet("商品マスター"); DataTable dataTable1 = dataSet1.Tables.Add("製品テーブル"); DataColumn dataClumn1 = dataTable1.Columns.Add("ID", typeof(int)); DataColumn dataClumn2 = dataTable1.Columns.Add("名前", typeof(int)); // テーブルにデータを追加 dataTable1.Rows.Add(new Object[] { 1, name1}); dataTable1.Rows.Add(new Object[] { 2, name2}); dataGridView1.DataSource = dataTable1; としています。 Formにボタンを配置し、ボタンクリック時にテキストボックス[txtProName]のデータを レコード追加したいのですが、記入の仕方がわかりません。 まず、 DataSet dataSet1 = new DataSet("商品マスター"); DataTable dataTable1 = dataSet1.Tables.Add("製品テーブル"); をロードイベントメソッドに記入しているのも問題がありそうなのですが、 良く理解できません。 ボタンイベントでデータを挿入する方法等、記入方法のご教授よろしくお願いいたします。 当方、超初心者なので、出来れば、ソースコードもお願いいたします。m(_ _)m

  • DataGridView のソート時のDatasorceの行位置について

    DataGridViewにDatatableをDatasourceとして設定しています。 画面でカラムタイトルをクリックして、データの並びを変更 した時に、DataGridViewのindexに応じたDatatableのindexを 知る方法を教えて下さい。(伴って変わらないのです) 画面のデータを修正すると、Datatableの値は連携して変わって います。

  • VB DataGridView 行削除

    Visualbasic 2010 を利用してWindowsFormアプリケーションを開発しております。 データベースはORACLE11を利用しております。 VB側よりOracleDataAdapterを利用してDatatableにORACLEのSELECT結果を格納しています。 DataGridViewには上記のDataTableをDataSourceとして割り当てております。 このDataGridViewに並び替え機能を組み込んでおります。 ※DataViewのSortを利用して並び替えを実現しております。 この後にDataGridViewの行削除を行うと以下の例外が発生します。 一意制約(XXX.PKY_テストデータ)に反しています Oracle.DataAccess.Client.OracleException これはDataTableをSortしたためOracleDataAdapterと一致しなくなったことが原因ではないかと推測しております。 DataGridViewの並び替えを行っても正常に行削除を行いDataTableにも反映する方法が分る方がいらっしゃいましたらご教授頂けないでしょうか。 VBソース抜粋 ・データ抽出 '/ SQLをOracleで実行した結果をデータアダプタに格納 Dadp5 = New OracleDataAdapter("SELECT * from テストデータ", CONFIG.Database) Dadp5.Fill(dt_test) Me.DataGridView_TEST.DataSource = dt_test ・並び替え(降順) Dim dv = New DataView(dt_test) dv.Sort = "テストコード DESC" dt_test = dv.ToTable Me.H_DataGridView_test.DataSource = dt_test ・行削除 Dim scBuilder As New OracleCommandBuilder(Dadp5) '/ データグリッドビューの編集内容をデータベースへ反映 '/ 生成されたSQLを実行する Dadp5.Update(dt_test) ※ここで例外が発生致します。 お手数おかけ致しますが宜しくお願い致します。 以上です。

  • DataGridViewで教えてください。

    DataGridViewで教えてください。 VB初心者ですが どうかよろしくお願いいたします。 VB2005で DataGirdView(dgv1)の始めの行を 他のDataGridView(dgv2)に追加したいのですが、 うまくいきません。 どうすればよいのでしょうか? すみませんが、 教えてください。 よろしくお願いします。 Dim Table As DataTable Dim MainTable As DataTable Dim row As DataRow Table = DirectCast(dgv1.DataSource, DataTable) MainTable = DirectCast(dgv2.DataSource, DataTable) row = MainTable.NewRow row = Table.Rows(0) MainTable.Rows.Add(row)