LoginSignup
waniwanisan
@waniwanisan

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

フォーム間データ取得(複数のデータの値をフォームに渡したい)

解決したいこと

データグリッドビューに一覧表示されているデータから行を選択してその行の複数の値を別フォームの詳細画面のテキストボックスに表示させたいです。

現状、一つの値のみ(今回は名前情報)詳細画面のテキストボックスに値を渡すことが出来たが同じ要領で他の値をテキストボックスに渡そうとしていますが上手くいきません。

出来れば具体的なコードで指南していただけると助かります。

または、問題・エラーが起きている画像をここにドラッグアンドドロップ

データグリッドビュー側のソースコード(メインフォーム)

private void detailBtn_Click(object sender, EventArgs e)
        {
            this.Visible = false;
            //Detail zzz = new Detail();

            var a = new Detail(denwaDataGrid.CurrentRow.Cells[0].Value.ToString()); //名前
            var b = denwaDataGrid.CurrentRow.Cells[1].Value; //性別
            var c = denwaDataGrid.CurrentRow.Cells[2].Value; //生年月日
            var d = denwaDataGrid.CurrentRow.Cells[3].Value; //電話番号1
            var f = denwaDataGrid.CurrentRow.Cells[4].Value; //電話番号2
            var g = denwaDataGrid.CurrentRow.Cells[5].Value; //電話番号3
            var h = denwaDataGrid.CurrentRow.Cells[6].Value; //メール1
            var i = denwaDataGrid.CurrentRow.Cells[7].Value; //メール2
            var j = denwaDataGrid.CurrentRow.Cells[8].Value; //メール3
            var k = denwaDataGrid.CurrentRow.Cells[9].Value; //住所

            DataGridViewRow x = denwaDataGrid.CurrentRow;
            a.Show();


        }

詳細画面側のソースコード(詳細画面フォーム)

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Denwachou
{
    public partial class Detail : Form
    {
        private string _name;
        public Detail(string name)
        {
            InitializeComponent();
            _name = name;
        }

        private void Detail_Load(object sender, EventArgs e)
        {
            name_tb.Text = _name;
        }

        private void removeBtn_Click(object sender, EventArgs e)
        {
            this.Visible = false;
            Form1 zzz = new Form1();
            zzz.Show();
        }


    }
}

データグリッド.png

↓詳細を見たい行を選択して詳細ボタンをクリックすると下画面になる

詳細画面.png

佐藤健太だけでなく他のテキストボックスにも値を埋めたいです。

1

1Answer

            var b = denwaDataGrid.CurrentRow.Cells[1].Value; //性別
            var c = denwaDataGrid.CurrentRow.Cells[2].Value; //生年月日
            var d = denwaDataGrid.CurrentRow.Cells[3].Value; //電話番号1
            var f = denwaDataGrid.CurrentRow.Cells[4].Value; //電話番号2
            var g = denwaDataGrid.CurrentRow.Cells[5].Value; //電話番号3
            var h = denwaDataGrid.CurrentRow.Cells[6].Value; //メール1
            var i = denwaDataGrid.CurrentRow.Cells[7].Value; //メール2
            var j = denwaDataGrid.CurrentRow.Cells[8].Value; //メール3
            var k = denwaDataGrid.CurrentRow.Cells[9].Value; //住所

これらの行き先がないからですね。

   public Detail(string name)

で受け取っているのがnameだけでこの様にしていますよね。

var a = new Detail(denwaDataGrid.CurrentRow.Cells[0].Value.ToString()); //名前

Detailにbからkまで受け取れるようにすると一歩進むと思います。
ただし、項目が追加されるたびに増えていきますのでその後いろいろ試してみればと思います。

0Like

Comments

  1. @waniwanisan

    Questioner
    フォーム間でデータを一つ送る方法から参考にしました。今回分からないのは名前以外の複数の値を同時に渡す方法です。同じ要領で記述したけど上手くいかなかったから質問させていただきました。
    上にあるコードは現状、名前しか送れることが出来ないのは理解しております。
  2. > 同じ要領で記述したけど上手くいかなかった
    回答側からするとここが一番大事なんです・・・。

    こう言うコードはダメでしたってところにこうすればと回答できるんですが・・・・。


    こういうのが知りたいのか

    ```
    var a = new Detail(
    denwaDataGrid.CurrentRow.Cells[0].Value.ToString() //名前
    , denwaDataGrid.CurrentRow.Cells[1].Value //性別
    );
    ```


    ```
    private string _name;
    private string _sex;

    public Detail(string name, string sex)
    {
    InitializeComponent();
    _name = name;
    _sex = sex;
    }

    private void Detail_Load(object sender, EventArgs e)
    {
    name_tb.Text = _name;
    sex_tb.Text = _sex;
    }
    ```

    こういうの知りたいのか
    ```
    var a = new Detail(denwaDataGrid.CurrentRow.Cells);
    ```

    ```
    private DataGridViewRow _row;

    public Detail(DataGridViewRow row)
    {
    InitializeComponent();
    _row = row;
    }

    private void Detail_Load(object sender, EventArgs e)
    {
    name_tb.Text = _row[0].Value.ToString();
    sex_tb.Text = _row[1].Value.ToString();
    }
    ```
  3. @waniwanisan

    Questioner
    抽象的な質問で申し訳ございません。
    ひとつのデータしかとってこれないと悩んでいましたがデータグリッドビューの列をメインフォーム側で分解しないで行(一つのデータ)を取得して詳細フォーム側で分解すれば上手くいきましたね。
    その書き方も含め、分からなかったのでとても勉強になりました。
    動き自体は別の方法で上手くいきましたが参考にさせていただきます。
    ありがとうございました。

Your answer might help someone💌