C#でDataGridViewにデータを追加する方法

このQ&Aのポイント
  • C#のDataGridViewにデータを追加する方法について説明します。
  • DataGridViewには、Addメソッドを使用してデータを追加することができます。
  • オブジェクトを指定してAddメソッドを呼び出すことで、新しい行にデータを追加することができます。
回答を見る
  • ベストアンサー

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

C# DataGridViewにデータを追加したい。 追加ボタンでDataGridViewにデータを挿入したいのですが、うまくいきません。 DataGridViewRowCollection.Add(new Object[] { 7, 777, 777, 777 }); などとしてみたのですが、オブジェクトがありませんとエラーしてしまいます。 dataGridView1.DataGridViewRowCollection.Add(new Object[] { 7, 777, 777, 777 }); としてみてもエラーが出てしまいます。 1行だけ新規にデータを挿入したい場合はどの様に記述すれば良いのでしょうか? アドバイスよろしくお願いいたします。

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

  • ベストアンサー
  • oboroxx
  • ベストアンサー率40% (317/792)
回答No.1

次のソースコードを参考にしてみてください。 40行目あたり移行が問題の個所です。 http://www.oborodukiyo.info/Forms/VS2008/F-ReadCSVToDataTable.aspx やることは、最初にDataTableに必要なカラムを追加していき、次にそのDataTableのDataRowのインスタンスに対してデータをコピーしていき、次にそのDataRowをDataTableに追加して、最後にDataGridViewのDataSourceにバインドするという事です。

abuhiro
質問者

お礼

アドバイスありがとうございます。 リンク先を拝見しました。 データグリッドでは、リストボックスの様に コントロール.Add みたいな形では追記できないものなのでしょうか?

その他の回答 (1)

  • oboroxx
  • ベストアンサー率40% (317/792)
回答No.2

私の中の理解では、マイクロソフトの立場はUI(この場合はDataGridView)とデータのストレージ(この場合はメモリ上のDataTable)を分ける方向にあるんだと思います。 ですから、DataGridViewはあくまでもデータを見せるための及び操作させるためのもので記憶しておくものではないという事だと思います。 出来るとすれば、やったことはないのですが、Itemプロパティでやるのかなと思いますが、この場合でも先にカラムは先に必要な分は作っておくのかなと推測します。

abuhiro
質問者

お礼

なるほど。 ありがとうございます。 データを一時的に見せるフォームなので、DataTableは作る必要無いと思っていました。 Itemプロパティは試してなかったので、調べてみたいと思います。 いろいろ勉強になりました。 ありがとうございました。m(_ _)m

関連するQ&A

  • 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の行追加について。

    初めまして、VB初心者ですが皆様よろしくお願いいたします。 今、VB2005でDataGridViewを使用した入力システムを作成しています。 1~10行目まで入力したデータに対して、5行目に新規行を追加したいのですが。 この場合、現在入力されている5~10行目のデータを、6~11行目に退避した後 「DataGridView1.Rows.Add(DataGridView1.Focus」で5行目に新規行を追加すればいいのでしょうか? うまくいかず悩んでいます。 ご教授よろしくお願いいたします。

  • 【C# DataGridViewについて】

    C#であるWindowsFormアプリケーションを作っているのですが imagelistに格納されている画像群をDataGridViewで表示しようと for (int y = 0; y < gy; ++y) { DataGridViewRow row = new DataGridViewRow(); for (int x = 0; x < gx; ++x) { DataGridViewImageCell imageCell = new DataGridViewImageCell(); imageCell.Value = imageList.Images[y * gx + x]; row.Cells.Add(imageCell); } dataGridView1.Rows.Add(row);//ここが問題 } としたところ、印をつけたところで、「System.InvalidOperationException」 なる例外が発生し、止まってしまいました。(デバッグで実行時) エラーの詳細を見ると、「空のDataGridViewに行を追加することはできません」 と書いてありました。 仕方なく列を追加する形にしようとしても、CellsがDataGridViewColumnにはないからImageCellをColumnにAddできないし、困っています。 どうすればよいでしょうか?

  • C# .NET DataGridView の行を追加するとデータが消える。

    すぐ下に先ほど書いた質問がありますが、こちらに難点か追記してあります。下の質問は後ほど消します。(何でか、今現在消せないそうなので。) 環境 WindowsXP SP2 VisualStudio.NET 2005 C# テストプログラムで、こんなコードを書きました。 private void button1_Click(object sender, EventArgs e) { int iMaxCnt; dataGridView1.Rows.Add(1); iMaxCnt = dataGridView1.RowCount ; dataGridView1.EndEdit(); dataGridView1.Rows[iMaxCnt-1].Cells[0].Value = "たちつてと"; dataGridView1.Rows[iMaxCnt-1].Cells[1].Value = "なにぬめの"; dataGridView1.Rows[iMaxCnt-1].Cells[2].Value = "はひふへほ"; dataGridView1.EndEdit(); } ボタンのクリックイベントなので、これを何度か実行すると、DataGridView の一番下の行だけにデータが表示されてしまいます。(以前のボタン押下時に記入されたデータが消えてしまい、データの変更が確定されていないように見えます。) なぜなんでしょう?

  • C#でのDataGridViewについて

    C#でのDataGridViewについてお聞きしたいことがあります。 ボタンを押すことによって1行ずつつ更新・追加をするものを作ったのですが、その際に選択行も更新・追加されたものに一緒に移動させるにはどうすればいいでしょうか?

  • 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とか使う? 教えて頂きたいと思います。 よろしくお願いします。

  • VB.NET DataGridView 行の追加

    VB2010 WinXPにて開発しています。 「DataGridView1.Rows.Add()」で行を追加すると入力行の上の行が追加されるのは何故でしょうか? 下らない質問かと思いますが、行き詰まってます。 分かる方がいましたら、教えて下さい。 よろしくお願い致します。

  • C# datagridview データバインド系

    datagridviewのデータバインドについて教えてください. 今,下記のプログラム(一部)を組んで処理を行おうとしていますがうまくいかないため 何が悪いのか教えて頂けないでしょうか? 今datagridviewをデータテーブルにバインドしています. for (j = t; j < R - 1; j++) { object Ti = this.dataGridView1.Rows[j].Cells[0].Value; object Tibf = this.dataGridView1.Rows[j + 1].Cells[0].Value; string TiS = Convert.ToString(Ti); string TiSbf = Convert.ToString(Tibf); # region // シリアル値化 long serial = DateTime.Parse(TiS).ToBinary(); long serialbf = DateTime.Parse(TiSbf).ToBinary(); long parsesum = serial + Oneparse; if (serialbf != parsesum) { dataGridView1.Rows.Insert(j + 1, 1); // シリアル値から復元 DateTime dtm = DateTime.FromBinary(parsesum); string s = Convert.ToString(dtm); // 指定した書式で日付を文字列に変換する string stPrompt1 = dtm.ToString("yyyy/M/d H:mm"); this.dataGridView1.Rows[j + 1].Cells[0].Value = stPrompt1; } } 簡単に言うと,行を追加したいのですが,forの前でデータソースをnullにすると object Ti = this.dataGridView1.Rows[j].Cells[0].Value;でエラー if (serialbf != parsesum)の後にすると dataGridView1.Rows.Insert(j + 1, 1);でエラー が起こります.どちらの場合も下記のエラーが出ます. インデックスが範囲を超えています。負でない値で、コレクションのサイズよりも小さくなければなりません。 パラメーター名: index 本当に困っています. よろしくお願いいたします.

  • DataGridViewのデータをComboBoxの項目に追加する

    回答お願い致します。 現在、VB2005を勉強していてDataGridViewを学んでいます。 DataGridViewの項目に(教員番号,教員名)とあるとして、教員名のデータをComboBoxの項目に追加したいと考えています。 普通に項目を追加するのなら、 For intLoop = 0 To DataGridView.Rows.Count - 1 ComboBox.Items.Add(DataGridView.Rows(intLoop).Cells (1).Value) Next といった感じで出来るのですが、これだと教員名が重複している場合も全てComboBoxに項目を追加してしまうので、それを避けて項目を追加する良い方法はないでしょうか?

  • DataGridViewに関して

    開発環境:Visual Basic2008 Express Ediotion DataGridViewに関して教えて下さい。 DataGridViewに表示されているデータの中で、何行目が選択されているか を取得したいと考えています。 動作手順としては、DataGridViewのデータが選択された状態で、選択ボタンを押した 際に、どのデータが選択されているかを取得したいと考えています。 恐らく可能かと思われますが、何行目だけでなく、行にある項目の全ての値も取得 したいと考えています。 どのように記述したら良いかを教えて下さい。 参考になるようなホームページ、もしくはコードを記述して頂ければ幸いです。 Visual Basic2008初心者なので、初歩的な質問で申し訳ありません。 よろしくお願いします。

専門家に質問してみよう