質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.76%

  • C#

    6575questions

    C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

DataGridViewの使い方

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 461
退会済みユーザー

退会済みユーザー

DataGridView1とDataGridView2をForm1に貼りつけます。

DataGridView1には、Textカラムを1つ(Column1)、ボタンのカラムを1つ(Column2)。用意します
DataGridView2には、Textのカラムを2つ用意します(Column3, Column4)。

DataGridView1のTextカラムには「数字」を入力し、この数分だけDataGridView2のRowを追加します。
つまり、DataGridView1のTextカラムのcellに「5」を入力し、ボタンのカラムのcellをクリックすると、DataGridView2の行数が5行になる状態です。

そして、DataGridView2のColumn3, Column4に値を入れます。(わかりやすく、Column3は名前, Column4は性別とします)
今、DataGridVIew2のRowは5行。そこで、
名前  性別
A          男
B          男
C          女
D          男
E          女

と入力します。     

このDataGridView2のデータをプログラム上で保存しておくにはどうすればよいのでしょうか?

 public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();

            dataGridView1.Rows.Add();
            dataGridView1.Rows.Add();
        }

        private void dataGridView1_CellContentClick_1(object sender, DataGridViewCellEventArgs e)
        {
            DataGridView dgv = (DataGridView)sender;
            //"Column2"列ならば、ボタンがクリックされた
            if (dgv.Columns[e.ColumnIndex].Name == "Column2")
            {
                dataGridView2.Rows.Clear();

                for (int i = 0; i < dataGridView1[0, e.RowIndex].Value; i++)
                {
                    dataGridView2.Rows.Add();

                }
            }
        }
    }

(例)
DataGridView1の1行目に数字を入力し、ボタンをクリックする。
DataGridView2に名前と性別を入力する。入力完了後、ButtunをFormに貼りつけておくなどしてクリックイベントで入力データを保存(XMLなどファイルではなくプログラム上に保存)。

DataGridView1の2行目に数字を入力し、ボタンをクリックする。
DataGridView2に名前と性別を入力する。入力完了後、ButtunをFormに貼りつけておくなどしてクリックイベントで入力データを保存(XMLなどファイルではなくプログラム上に保存)。

DataGridView1のボタンをクリックすると、先ほど入力したデータがDataGridView2に表示される。

このような結果を得るにはどのようにすればよいのか教えてください。
プログラム上に保存と何度も記載しておりますが、表現が間違っているかもしれません。
結局、DataGridView1の1行目のボタンをクリックしたら、1行目のデータがDataGridView2に表示され、DataGridView1の2行目のボタンをクリックしたら、2行目のデータがDataGridView2に表示されるといった具合です。

よろしくお願いいたします。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

0

こんにちは。

このDataGridView2のデータを保存しておくにはどうすればよいのでしょうか?

下記が参考になります。私もやったことはないのですが、意外に簡単にできるようですね。
DataGridViewのデータをXMLに保存・読み込みする

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/09/21 12:27

    ご回答ありがとうございます。
    私の書き方が悪かったため訂正させていただきます。
    保存というのは、XMLなどファイルに保存ではなく、あくまでプログラム上で保存という意味です。
    せっかくご回答していただいたのに申し訳ございません。

    キャンセル

  • 2017/09/21 12:46

    「プログラム上で」とは具体的にどういう意味ですか? DataTable のインスタンスとか、List<T> 型のオブジェクトとか? それを後で何らかの目的に使うのだと想像していますが、であればそのことも具体的に書いてください。

    キャンセル

  • 2017/09/21 13:18

    何らかのクデータ構造を定義してそこへコピーしたり、そこから回復したりしたいという意味ですね?
    であれば、↓が参考になりますよ。
    https://qiita.com/lusf/items/222bbcb6a3f69306517b

    キャンセル

  • 2017/09/21 15:10

    SurferOnWwwさん、ご返信ありがとうございます。
    どのような言葉が適しているのかあまりわかりませんが、「プログラム上で」というのは、おっしゃる通りListだったりDataTableです。
    仮に、DataGridView1の1行目のボタンをクリックし、DataGridView2にデータを入力します。そしてDataTableをnewしてそこにDataGridView2の入力データを保存??しておきます。
    次に、DataGridView1の2行目のボタンを上と同じ動作をします。
    その後、DataGridView1の1行目のボタンを再度クリックしたとき、先ほど入力していたデータがDataGridView2に出力されている状態で表示したいです。2行目のボタンをクリックした場合も同様。
    つまり、後からでも手直しが出来る状態です。
    先ほどの私のソースコードでは、DataGridView1のボタンをクリックしデータを入力しても、結局保存??していないので入力したデータが表示されません。(当たり前ですが。。。)
    ですので、DataGridView1のボタンをクリックし、データの表示を切り替えれるような動きがほしいです。

    よろしくお願いいたします。

    キャンセル

  • 2017/09/21 15:14

    Chironianさん、ご返信ありがとうございます。
    参考にしてみます。

    キャンセル

  • 2017/09/21 16:00

    >「プログラム上で」というのは、おっしゃる通りListだったりDataTableです。

    であれば、上のコメントで Chironian さんが紹介された記事の「DataSouceプロパティを使う」のセクションに書いてあるようにしてはいかがですか?

    質問にあった、

    > DataGridView2のColumn3, Column4に値を入れます。

    というところは DataGridView を直接操作して行うのではなく、その記事の Form1.cs のコードの書いてあるように、まず List<T> 型のオブジェクトを作って、DataGridView にバインドするということです。

    そうすれば、

    > DataGridView2のデータをプログラム上で保存

    は、そのためのコードを別に書く必要はなくなり、事前に作った List<T> 型のオブジェクトをそのまま使えばいいわけですから。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.76%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 解決済

    C# DataGridViewの新規行追加について

    現在C#、Visual Studio2013 を勉強しています ■実現したいこと 入力した値をDataGridViewに新規行を追加して表示させる プログラムの

  • 解決済

    C#のDataGridView

    C#のDataGridViewはRow, Column, Cellのような構造をもっていますが、複雑でわかりにくいです。 3行目、4列目のセルの種類(buttonとかstri

  • 解決済

    dataGridViewのテキスト出力について

    dataGridViewにテキストを紐づけて、 dataGridViewが更新なり追加なりされると、 紐づけたテキストも更新されるような仕組みは無理でしょうか。 やりたい

  • 解決済

    C# DataGridViewについて

    前提・実現したいこと C#で「ボタンをクリックすると、XMLの内容をDataGridView」に表示するプログラムを作りました。 しかし、ボタンを何回もクリックすると、XM

  • 解決済

    asp.netでのjQueryを使ったコントロールのコピーについて困っています。

    前提・実現したいこと asp:buttonの追加ボタンを押下時、<div class="manyText">で囲まれた範囲をすべてコピーし、次の行に追加したいです。 発生し

  • 解決済

    C# DatagridViewの使い方

    C# DataGridViewについて 1列目の1行目にA、2行目にB、3行目にCと表示したくて下記のようにコーディングしました。 namespace WindowsF

  • 解決済

    DataGridViewのイベント

    Form1の画面にDataGridViewを貼りつけ、DataGridViewのカラムを3つ追加します。 カラム1のColumn TypeはDataGridView TextB

  • 解決済

    DataGridViewのComboBoxについて

    DataGridViewのColumn1がComboBoxのカラムだとします。 DataTable dt = new DataTable(); dt.C

同じタグがついた質問を見る

  • C#

    6575questions

    C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。