🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
C#

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

Q&A

2回答

7243閲覧

Datagridviewの選択行の一部の値を別のフォームに渡したい

退会済みユーザー

退会済みユーザー

総合スコア0

C#

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

0グッド

0クリップ

投稿2021/02/03 01:07

編集2021/02/03 05:48

プログラミング初心者です。
調べてもよく分からなかったため、お力添えいただけたらと思います。

DatagridViewの選択した行の一部の値を別フォームに渡したいです。

例えば、
DatagridViewの中身(、で区切ったところがそれぞれのカラムにはいっています)
A、いちご、おいしい
B、みかん、すっぱい
C、りんご、しゃきしゃき

この中から
A、いちご、おいしい の行を選択し、A と いちご の値だけ取り出し、別フォームに渡したいのです。

受け取る別フォームには、1つ分のデータが入る場所しかありません。

よろしくお願いします。

以下追記分
OSはWindows10、visualstudioのバージョンは2015です。

渡し元のフォーム
private void FormFuruit_Load(object sender, EventArgs e)
{
gridFuruitList.ColumnCount = 3;

GridFruitList.Columns[0].HeaderText = “収穫者”;
GridFruitList.Columns[1].HeaderText = “種類”;
GridFruitList.Columns[2].HeaderText = “感想”;

GridFruitList.Rows.Add(“A”,”いちご”,”おいしい”);
GridFruitList.Rows.Add(“B”,”みかん”,”すっぱい”);
GridFruitList.Rows.Add(“C”,”りんご”,”しゃきしゃき”);
}

private void GridFruitList_CellDoubleClick(Object sender,datagridviewcelleventargs e)
{
string A=(string)grid furuitlist.current row.cells[0].Value;
string B=(string)grid furuitlist.current row.cells[1].Value;
}

渡されるフォーム

private void FrmUketori_Load(object sender, EventArgs e)
{
GridUkeView ColumnCount = 2;
GridFruitList.Columns[0].HeaderText = “収穫者”;
GridFruitList.Columns[1].HeaderText = “種類”;
}

行選択ですが、プロパティのSelectionModeをFullRowSelectにしています。(これで選択できると思っているのすが、無理でしょうか)

本当に初心者のため、受け渡す、ということがとても難しいです。

https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q13201737468?__ysp=RGF0YWdyaWRWaWV3IOWIpeOBruODleOCqeODvOODoOOBqw%3D%3D

https://search.yahoo.co.jp/amp/s/okwave.jp/amp/qa/q8306007.html%3Fusqp%3Dmq331AQQKAGYAf6SuMCvv66IRbABIA%253D%253D

こちらのURLがやりたいことに近いのかもしれないとおもい、調べていました。
しかし、グリッドビューの一部を取得→グリッドビューに受け渡しがわからず、困っている状況です。

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2021/02/03 01:29 編集

開発環境を書いてください(OS, Visual Studio, .NET Framework のバージョンなど)。 どこまで自分でコードを実装できていて、どこで躓いていて、何が分かれば解決できるのかを、自分が実装したコードのサンプルをアップして説明願います。今の質問内容では丸投げで、Teratail では推奨されていません。
退会済みユーザー

退会済みユーザー

2021/02/03 01:38

ありがとうございます。大変申し訳ございません。 開発環境はvisualstudioです。 現在、DatagridViewの中身を設定するところまでしか書けていません。
退会済みユーザー

退会済みユーザー

2021/02/03 01:43

> 開発環境はvisualstudioです。 OS, Visual Studio, .NET Framework のバージョンを書くようにお願いしておりますが? コメント欄に書くのではなく、質問欄を編集して追記願います。 > 現在、DatagridViewの中身を設定するところまでしか書けていません。 ごく簡単なサンプルでよいのでそれを質問欄に追記してください。あと、「受け取る別フォームには、1つ分のデータが入る場所しかありません」とのことなのでそれもある程度書けているはず。
fana

2021/02/03 01:48

> 渡したいです だけだと,「じゃあ渡せばいいじゃん.」としかならない. 渡すことに関して一体何が障害となっているのか? みたいなことを書かないと.
退会済みユーザー

退会済みユーザー

2021/02/03 02:37

> DatagridViewの選択した行の一部の値を別フォームに渡したいです。 コードを拝見すると選択できるようにはなってないようですが、そこはどうするのですか?
退会済みユーザー

退会済みユーザー

2021/02/03 02:54 編集

> 調べてもよく分からなかったため、お力添えいただけたらと思います。 調べて判らなかったのであれば、どこのページを調べて、どういった記事があって、どの部分が理解出来なかったかまで記述してみてください。調べ方自体が判らないのであれば、まずはGoogleで "C# DataGridView" で検索する所から始めてください。DataGridViewについて解説している記事やサンプルが沢山見つかります。 記事は見つけたけど読むのが面倒なので諦めた、という事であれば、ここで聞いてもまたすぐ躓くと思います。
退会済みユーザー

退会済みユーザー

2021/02/03 06:18 編集

> こちらのURLがやりたいことに近いのかもしれないとおもい、調べていました。 > しかし、グリッドビューの一部を取得→グリッドビューに受け渡しがわからず、困っている状況です。 そのリンク先の回答で、DataGridViewのSelectedRowで選択行を取得し、そこからCells(列).Value でセル内の値を取得したりしてると思うんですが、その部分は理解できます?
退会済みユーザー

退会済みユーザー

2021/02/03 06:31

>DataGridViewのSelectedRowで選択行を取得し、そこからCells(列).Value でセル内の値を取得したりしてると思うんですが、その部分は理解できます? 取得して、それぞれのNumericUpDownに値を入れているのはわかります…
退会済みユーザー

退会済みユーザー

2021/02/03 07:17 編集

あとソースコードをそのまま記入するとインデントが崩れたりして読みづらくなるので、編集してコードの挿入で記入するようにしてください。
退会済みユーザー

退会済みユーザー

2021/02/03 07:21

別フォームに値を渡す前に、DataGridView の行をクリックなどして選択した際に、選択した行の「収穫者」と「種類」のデータを取得してこないと話にならないのですが、そこはできてますか? それから、選択した時点で別フォームは表示されているのですか? それとも、選択した時点で別フォームを Show してその時点で値を渡すのですか? それによって話が変わてくるので、そのあたりのストーリー・シナリオを書いてください。
guest

回答2

0

受け取る別フォームには、1つ分のデータが入る場所しかありません。

1つ分のデータが入る場所というのがどういう事か良く分からないんですが、無ければ受け渡し用のプロパティを自分で増やせばいいだけです。安直にやるなら、

C#

1 public DataGridViewRow[] SelectedRows { get; set; }

のようなプロパティを受け取り側フォームに追加し、

C#

1 //選択中のDataGridView行をコピー 2 var rows = new DataGridViewRow[gridFruitList.SelectedRows.Count]; 3 gridFruitList.SelectedRows.CopyTo(rows, 0); 4 5 using (var formUketori = new FormUketori()) 6 { 7 //受け渡し先のプロパティに選択中のDataGridView行を設定 8 formUketori.SelectedRows = rows; 9 10 formUketori.ShowDialog(); 11 }

みたいにすれば、とりあえず受け渡す事は出来ます。

投稿2021/02/03 07:54

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

1.インスタンス変数を参照できるようにする
2.呼び出すメソッドには値だけ入れておいて別の処理でその値を取り出す作業を行う

1.

//privateではなくpublicで参照可能に public partial class FrmUketori : Form { InitializeComponent(); } private static FrmUketori _instance; public static FrmUketori Instance { get { //_instanceがnullまたは破棄されているときは、 //新しくインスタンスを作成する if (_instance == null || _instance.IsDisposed) { _instance = new FrmUketori(); } return _instance; } } //この一行でメインフォーム側でFrmUketori.Instance.hogehogeDefaultText変数に値が入れられるようになる。 public string hogehogeDefaultText { get; set; }

2.

//FormFuruit側 FrmUketori.Instance.hogehogeDefaultText = dataGridView[0, dataGridView.CurrentCell.RowIndex].Value.ToString(); FrmUketori.Instance.Show(this);

先にデータを突っ込んでからshowで表示。
sub側はShownイベント時に必要な位置へデータを代入。
Loadイベントだとタイミングを逃して値が入る前に読み込んでしまいエラーになった記憶があります。
表示しっぱなしなら他のイベントで対応してください。

//FrmUketori側 private void _Shown(object sender, EventArgs e){ GridFruitList.Columns[0].HeaderText = hogehogeDefaultText }

サンプルデータから引用しましたけど.HeaderTextに入れてるのは違和感を感じますね。
参考サイト

ボタン選択時の高さはdatagridview.CurrentCell.RowIndexで拾って渡す形が楽かなと思います。
参考サイト

投稿2021/02/03 05:53

編集2021/02/03 06:20
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問