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

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

新規登録して質問してみよう
ただいま回答率
85.48%
C#

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

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

.NET Framework 4.0

Microsoft Windows用のソフトウェア開発環境/実行環境である .NET Frameworkの4番目のメジャーバージョンです。

Q&A

解決済

3回答

29533閲覧

DataGridViewのコンボボックスセルを動的に変更したい

G_chan

総合スコア17

C#

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

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

.NET Framework 4.0

Microsoft Windows用のソフトウェア開発環境/実行環境である .NET Frameworkの4番目のメジャーバージョンです。

0グッド

0クリップ

投稿2019/04/24 04:18

いつもお世話になっております。

C#でWindowsFormアプリケーションを作成しております。

取得したデータをDataGridViewに表示しています。取得したデータによってコンボボックスの中身を動的に変更したいです。

以下のプログラムでDataTableを作成し動的にコンボボックスをDataGridViewに追加することができましたが、DataGridViewComboBoxColumnのDataSourceが全行共通のDataSourceのためか(予想です)行ごとに変更ができませんでした。

C#

1 DataTable test = new DataTable("test"); 2 test.Columns.Add("Display", typeof(string)); 3 test.Columns.Add("Value", typeof(int)); 4 test.Rows.Add("A", 0); 5 test.Rows.Add("B", 1); 6 test.Rows.Add("C", 2); 7 test.Rows.Add("D", 3); 8 test.Rows.Add("E", 4); 9 test.Rows.Add("F", 5); 10 test.Rows.Add("G", 6); 11 12 //DataGridViewComboBoxColumnを作成 13 DataGridViewComboBoxColumn column = new DataGridViewComboBoxColumn(); 14 //DataGridViewComboBoxColumnのDataSourceを設定 15 column.DataSource = test; 16 //実際の値が"Value"列、表示するテキストが"Display"列とする 17 column.ValueMember = "Value"; 18 column.DisplayMember = "Display"; 19 column.Name = "曜日"; 20 //DataGridView1に追加する 21 dataGridView1.Columns.Add(column);

DataGridViewComboBoxColumn としているところを DataGridViewComboBoxCellにすることによって目的は果たせそうですが、どのようにしてコンボボックスのセルに設定するかがわからないです。

自分自身もよくわかっていないのでふわふわとした質問で申し訳ないのですが、よろしくお願いいたします。

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

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

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

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

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

YAmaGNZ

2019/04/24 14:09

大元のDataGridViewに表示しているデータはどのように表示しているのですか?
G_chan

2019/04/25 03:57

DataGridViewには以下のようにデータを表示させています。 dataGridView1.Rows.Add(データ1,データ2);; 同じように引数にDataSourceを指定するだけでComboBoxの中身が変更できるのが理想です。
guest

回答3

0

DataGridViewComboBoxCellにもDataSourceプロパティ、DisplayMemberプロパティ、ValueMemberプロパティがありますので、それを設定すれば、変更することが可能です。

DataGridViewComboBoxCellの取得の仕方としては、dataGridView1.Rows.Addで行を追加した後、該当のセルを取得すればよろしいかと

投稿2019/04/25 07:12

YAmaGNZ

総合スコア10242

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

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

0

取得したデータによってコンボボックスの中身を動的に変更したいです。

具体的にどういうことがしたいのか分かりません。以下の記事のようなことでしょうか?

DataGridView に ComboBox を表示
http://surferonwww.info/BlogEngine/post/2014/01/23/how-to-show-combobox-column-in-datagridview.aspx

違う場合がはどこがどう違うかを書いてください。

投稿2019/04/24 05:15

編集2019/04/24 05:17
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

G_chan

2019/04/24 12:08

今回のデータ取得方法は自作のAPIにHTTPリクエストを送ることによってjsonで受け取っています。 DataGridViewに「id」と「value」というカラムがあるとします。 受っとった「id」が1であれば「value」には「A」、「B」が選択できるコンボボックス 「id」が2であれば「value」には「C」、「D」が選択できるコンボボックスを用意したいです。 また、コンボボックスにはDisplayMemberとDisiplayValueを設定し取得する値と見えている値を別にしたいです。 教えていただいたURLは非常に有益な情報ではありましたが、すべての行で同じデータがコンボボックスに設定されているように見えますので今回やりたいこととは別な印象を受けました。 すべて理解できているわけではないと思いますので解釈違いであればご指摘いただければ幸いです。
退会済みユーザー

退会済みユーザー

2019/04/24 13:29 編集

> すべての行で同じデータがコンボボックスに設定されているように見えますので今回やりたいこととは別な印象を受けました。 その通りです。そういう目的なので。 DataGridView を使う目的は、DB のテーブルのレコード一覧を表示して、それをユーザーが編集し、編集結果で DB のテーブルを更新するということ以外は自分の頭にはありません。 紹介した記事にも書きましたが、そこでの ComboBox の出番は、そのままでは数字で表示される列があってユーザーにとっては分かりにくいので、数字に代えて該当する名前を ComboBox を使用してドロップダウン形式で一覧を表示し、ユーザーがデーターベースを編集・更新する際に便宜を図るというものです。 なので、行のデータによって ComboBox の中身を変えるというのは全くの想定外なのです。 行のデータによって、ComboBox の中身を変えたいということのように思えますが、そういうことをしてどういう意味があるのか理解できません。できれば、そもそも何がしたいのか、そういうことをすることにより何ができるのかを説明していただけませんか。
G_chan

2019/04/25 03:26

具体的な話をだしてしまいますと、今回作成したいのはイベント(プログラム的なイベントではなく催事)スケジュールの登録です。スケジュールにはイベント名、場所、開始時間等の要素があります。 今回行のデータによってComboBoxの中身を変えたいのは場所の要素です。イベントは同じ建物でも前回とは別のセミナー室だったりするパターンがあるからです。 DBにはEventテーブルとRoomテーブルがあります。 Eventテーブルにはどの建物で行うかの情報が「id」カラムに格納されちます。 Roomテーブルには「id」カラムと部屋の名前である「room_name」カラムがあります。(カラム名とテーブル名は適当です。) Eventテーブルから取得した「id」によって表示するComboBoxの中身を変えたいというのが今回の内容です。 すべての場所をComboBoxに表示してしまうと、そのイベントを行う建物には存在しない「room_name」が表示されるので矛盾が発生してしまいます。選択する人が気を付ければいいだけですが、今後イベントが増えることによって「room_name」が増えることを考えると選択するのも大変ですし、あまりスマートではないかなと感じました。 プログラミングは定年退職してから始めたので開発経験がありません。 こういった手法がそもそもオーソドックスなものなのかも判断がつきません。もしあまりよくない方法であればそれもご指摘いただければと思います。
退会済みユーザー

退会済みユーザー

2019/04/25 06:01

せっかく説明いただいたのですが、何度読んでもどう考えてもやっていることが普通ではないように思えて意味が分かりません。お役に立てずすみませんが、他の方の回答をお待ちください。
guest

0

ベストアンサー

DataGridViewとComboBoxを分けてみてはどうでしょうか?

DataGridViewは表示だけにして、入力は別で行うとComboBoxはそれぞれ1つずつで
内容を変更しても他に影響ありませんね。

任意の行に入力する方法については、他で調べるなりして
出来なければまた質問していただければいいと思います。

追記
ComboBoxの内容変更については、ケースごとにデータソースを変更すればいいかと思います。

投稿2019/04/26 01:40

編集2019/04/26 01:43
k.matsuda

総合スコア293

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問