DataGridViewの使い方
- 評価
- クリップ 0
- VIEW 3,055

退会済みユーザー
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ページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
checkベストアンサー
0
こんにちは。
このDataGridView2のデータを保存しておくにはどうすればよいのでしょうか?
下記が参考になります。私もやったことはないのですが、意外に簡単にできるようですね。
DataGridViewのデータをXMLに保存・読み込みする
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.33%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
2017/09/21 12:27
私の書き方が悪かったため訂正させていただきます。
保存というのは、XMLなどファイルに保存ではなく、あくまでプログラム上で保存という意味です。
せっかくご回答していただいたのに申し訳ございません。
2017/09/21 12:46
2017/09/21 13:18
であれば、↓が参考になりますよ。
https://qiita.com/lusf/items/222bbcb6a3f69306517b
2017/09/21 15:10
どのような言葉が適しているのかあまりわかりませんが、「プログラム上で」というのは、おっしゃる通りListだったりDataTableです。
仮に、DataGridView1の1行目のボタンをクリックし、DataGridView2にデータを入力します。そしてDataTableをnewしてそこにDataGridView2の入力データを保存??しておきます。
次に、DataGridView1の2行目のボタンを上と同じ動作をします。
その後、DataGridView1の1行目のボタンを再度クリックしたとき、先ほど入力していたデータがDataGridView2に出力されている状態で表示したいです。2行目のボタンをクリックした場合も同様。
つまり、後からでも手直しが出来る状態です。
先ほどの私のソースコードでは、DataGridView1のボタンをクリックしデータを入力しても、結局保存??していないので入力したデータが表示されません。(当たり前ですが。。。)
ですので、DataGridView1のボタンをクリックし、データの表示を切り替えれるような動きがほしいです。
よろしくお願いいたします。
2017/09/21 15:14
参考にしてみます。
2017/09/21 16:00
であれば、上のコメントで Chironian さんが紹介された記事の「DataSouceプロパティを使う」のセクションに書いてあるようにしてはいかがですか?
質問にあった、
> DataGridView2のColumn3, Column4に値を入れます。
というところは DataGridView を直接操作して行うのではなく、その記事の Form1.cs のコードの書いてあるように、まず List<T> 型のオブジェクトを作って、DataGridView にバインドするということです。
そうすれば、
> DataGridView2のデータをプログラム上で保存
は、そのためのコードを別に書く必要はなくなり、事前に作った List<T> 型のオブジェクトをそのまま使えばいいわけですから。