• 締切済み

Datagridviewで例外

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

みんなの回答

回答No.2

データグリッドビューに表示されなくなる可能性があるのは、dt2にコピーされたデータに関する問題が原因である場合があります。以下のことを確認してみてください。 dt2にコピーされたデータに、実際にデータが含まれているかどうか確認してください。例えば、dt2に行が存在しているかどうか、または行が削除されていないかどうかを確認してください。 dt2に正しいスキーマが設定されているかどうか確認してください。dt1とdt2が同じスキーマである必要があります。スキーマが異なる場合、データが表示されなくなる場合があります。 データグリッドビューが正しいデータソースを参照しているかどうか確認してください。データグリッドビューは、dt2を正しいデータソースとして参照している必要があります。 これらの手順を確認した後、データが表示されるかどうか再度確認してみてください。

全文を見る
すると、全ての回答が全文表示されます。
回答No.1

データが表示されない原因として、いくつかの可能性が考えられます。以下にそれぞれの対処法をご紹介します🔎😊。 DataTable.Selectの抽出条件が正しく設定されているか確認🧐 抽出条件が正しく設定されていないと、データが抽出できず、結果的にデータグリッドビューに表示されなくなります。抽出条件を再度確認してください🔍。 DataTable.Selectの結果が空でないことを確認🔍 (3)のDataTable.Selectの結果が空の場合、データグリッドビューに何も表示されません。結果が空でないことを確認してください。空の場合、抽出条件を見直してみてください🔄。 CopyToDataTableの使用方法が正しいか確認👩‍💻 (4)のCopyToDataTableの使用方法が正しいかどうか確認してください。例えば、以下のように使用できます。 DataTable dt2 = dt1.Select("抽出条件").CopyToDataTable(); データグリッドビューへのデータバインディングが正しく行われているか確認🔗 (5)でデータグリッドビューにdt2をセットする際、データバインディングが正しく行われているか確認してください。以下のようにデータバインディングができます。 dataGridView1.DataSource = dt2; これらのチェックを行い、修正が必要な箇所があれば修正してみてください🛠️✨。それでも改善されない場合、デバッグを行い、どの段階でデータが失われるかを特定してみると良いでしょう🧑‍💻🔍。 うまく問題が解決されることを願っています🍀!もし他に質問があれば、どんどん聞いてくださいね😄🙌!

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 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) ※ここで例外が発生致します。 お手数おかけ致しますが宜しくお願い致します。 以上です。

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

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

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

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

  • 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) この追加したカラムを一番左に表示したいです。

  • PostgreSQL+DataGridView

    質問させてください。 環境:PostgreSQL、VB.NET2010、Npgsql PostgreSQL上のDBには以下のテーブルを準備 create table test_table ( id serial not null primary key, category_name text not null ); とりあえず1行のデータのみ入っています。 ユーザフォームにDataGridViewとButtonとBindingSourceを1つづつ配置。 以下のプログラムでフォームロード時にDBの内容をDataGridViewへ表示させることまでできました。 Imports Npgsql Public Class Form1 Public Const conn = "Server=****;Port=****;User Id=****;Password=****;Database=****;" Private DA As NpgsqlDataAdapter Private DT As New DataTable Private Sub Form1_Load(省略) Try Dim command As String = "select * from test_table" DA = New Npgsql.NpgsqlDataAdapter( command, conn ) DT = New DataTable DA.Fill(DT) BindingSource1.DataSource = DT DataGridView1.DataSource = BindingSource1.DataSource Catch ex As Exception MessageBox.Show(ex.Message.ToString(), "エラー") End Try End Sub End Class そこで、このDataGridViewへユーザが入力、修正し、配置したボタンを押すことでDBへ反映させたいのですが、この部分がよくわからなくて困っています。 PostgreSQL以外のDBはサンプルが沢山あるのですが・・・・ よろしくお願いします。

  • DataGridViewについて

    Fom1のDataGridViewから選択した行のデータをForm2のDataGridViewに渡し、Form2で編集しFom1に反映せると、どの行のデータも1行目に入ってしまいます。 どのようなコードで解決できますか? 【Form1】 private void DataGridView1_SelectedRowsDoubleClick(Object sender, MouseEventArgs e) { // Form2を作成し、親フォームとしてForm1を設定する Form2 f2 = new Form2(); f2.Owner = this; // 親フォームを設定 // 選択行のデータを渡す f2.SetRowData(dataGridView1.SelectedRows, dataGridView1); // Form2を表示する f2.Show(); } /// <summary> /// 選択行のデータを更新するメソッド public void UpdateSelectedRowData(int rowIndex, string editedData1, string editedData2, string editedData3) { // データソースが DataTable の場合のみ処理を実行する if (dataGridView1.DataSource is DataTable dt && dt.Rows.Count > rowIndex) { // データ行を取得する DataRow dataRow = dt.Rows[rowIndex]; // 編集データを新しいデータ行にセットする dataRow["date"] = editedData1; dataRow["name"] = editedData2; dataRow["week"] = editedData3; } } } } 【Form2】 public void SetRowData(DataGridViewSelectedRowCollection rows, DataGridView dataGridView)  { //データテーブルの作成 DataTable dt = createData(); foreach (DataGridViewRow r in rows) { //1列目~3列目を取り出す string s1 = r.Cells[1].Value.ToString(); // 日付 string s2 = r.Cells[2].Value.ToString(); // 名前 string s3 = r.Cells[3].Value.ToString(); // 曜日 dt.Rows.Add("2023年", s1, s2, s3); //日付順に昇順に表示する dt.DefaultView.Sort = "日付 ASC"; } //一覧を表示する dataGridViewDisp2(dt); } // 編集後のデータを保持するためのプロパティ public string EditedData1 { get; set; } public string EditedData2 { get; set; } public string EditedData3 { get; set; } /// 更新ボタンの処理 private void savebtn_Click(object sender, EventArgs e) { // 親フォーム Form1 をForm1に指定する Form1 form1 = this.Owner as Form1; if (form1 != null) { // Form1のDataGridViewのデータソースを取得する DataTable dt = form1.dataGridView1.DataSource as DataTable; if (dt != null) { // dataGridView2の各行を処理する foreach (DataGridViewRow row in dataGridView2.Rows) { // 新規行はスキップする if (row.IsNewRow) continue; // 編集されたデータを取得する string editedData1 = row.Cells[1].Value.ToString(); string editedData2 = row.Cells[2].Value.ToString(); string editedData3 = row.Cells[3].Value.ToString(); // 選択された行のインデックスを取得する int rowIndex = row.Index; // 親フォーム Form1 の UpdateSelectedRowData メソッドを呼び出す form1.UpdateSelectedRowData(rowIndex, editedData1, editedData2, editedData3); } } } // 現在のフォームを閉じる this.Close(); } } }

  • DataGridViewに関して

    開発:Visual Basic 2008 考え方の質問になってしまうかもしれませんが教えて下さい。 Datagridviewを用いて、データの入力をさせたいと考えています。 但し、入力だけでなく画面にある表示ボタンを押した際には、テーブルに格納されている データを検索しに行き、その内容を表示させたいと考えています。 Datagridviewはフォームに貼り付け、各項目を一つずつ作成してあります。 しかし、この場合、以下のような記述をすると(そもそも記述が違うかと思われますが・・・)、 もともと作成してある項目(列)にデータがセットされず、新規で列を作ってしまいます。 《記述内容》 '変数の宣言 Dim dtSet As DataSet = New DataSet("PRODUCTS") Dim dtTable As DataTable 'データセットにテーブルを追加する dtTable = dtSet.Tables.Add("A_TBL") 'テーブルにフィールドを追加する '.Add("フィールド名", フィールドの型)で追加します dtTable.Columns.Add("AAA", Type.GetType("System.String")) Dim data_row As DataRow = dtTable.NewRow() data_row("AAA") = PIN_AAA dtTable.Rows.Add(data_row) 'DataGridにデータを表示する G_BBB.DataSource = dtSet.Tables(0) そもそもDatagridviewを用いて、入力や表示を行うにはどのような形にするのが 良いのでしょうか? Datasetとか使う? 教えて頂きたいと思います。 よろしくお願いします。

  • C#のdatatableを配列に挿入し、DataGridViewにバインドする方法

    開発環境:VS2005 はじめまして。ゆかりともうします。 今悩んでいるのが、datatableに入っているオブジェクトを配列に挿入し、 文字列編集後にDataGridViewに表示させたいのですが、やり方がわかりません。 お手数ですが、どなたかご教示いただけないでしょうか? コードサンプル) ArrayList array = new ArrayList(); select * from name; using (System.Data.DataTable dataTable = new DataTable()) { this.sqlDataAdapter.Fill(dataTable); <---どのように記述してよいのか分かりません---> } ※select文で抽出されてくる項目は5つございます。 すみませんが、よろしくお願い致します。

  • visualbasic datagridview

    VisualBasic 2013 を利用してWindows Formアプリケーションを構築しております。 DataGridViewを配置してデータベースよりデータ抽出した結果を表示しております。 表示レコードが複数行存在する場合にはスクロールバーが表示されているのですが、スクロールバーの表示が小さいため以下のような方式で制御できないかと考えております。 ★実現したいこと  ボタン「↑」を配置しボタンクリックで上側へのスクロール制御  ボタン「↓」を配置しボタンクリックで下側へのスクロール制御 大変お手数お掛けいたしますがご存じの方がいらっしゃいましたらご教授のほどよろしくお願いいたします。 以上です。

  • DataGridView スクロール時の描画速度

    Visualbasic 2013 でWindows Form アプリを開発しております。 DataGridViewにOracleのテーブルより抽出した結果を 10,000レコードを表示する必要があります。 ※DataTableをバインドしてDataGridViewのDataSourceに指定しています。 表示自体は問題なく実装できているのですが、 スクロール時の描画が遅いため実運用では支障がでると考えられます。 スクロール時の描画速度を向上する施策として何か分る方が いらっしゃいましたらご教授頂けますと幸いです。 現時点では以下のような実装としております。 ・DoubleBufferedを有効にしております。 ・1レコードごとにデータ妥当性チェックを行っております。  ※DataTableの全行ループしチェックNGの場合セルの背景色を赤色にしています。