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

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

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

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

Visual Studio

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

.NET Framework 4.0

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

Q&A

解決済

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

G_chan
G_chan

総合スコア17

C#

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

Visual Studio

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

.NET Framework 4.0

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

3回答

0グッド

0クリップ

23162閲覧

投稿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にすることによって目的は果たせそうですが、どのようにしてコンボボックスのセルに設定するかがわからないです。

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

以下のような質問にはグッドを送りましょう

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

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

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

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

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

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

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

適切な質問に修正を依頼しましょう。

YAmaGNZ

2019/04/24 14:09

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

2019/04/25 03:57

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

回答3

2

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

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

投稿2019/04/25 07:12

YAmaGNZ

総合スコア9461

alg, Zuishin👍を押しています

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

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

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

このような回答には修正を依頼しましょう。

1

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

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

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
SurferOnWww

総合スコア17417

Zuishin👍を押しています

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

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

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

このような回答には修正を依頼しましょう。

回答へのコメント

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は非常に有益な情報ではありましたが、すべての行で同じデータがコンボボックスに設定されているように見えますので今回やりたいこととは別な印象を受けました。 すべて理解できているわけではないと思いますので解釈違いであればご指摘いただければ幸いです。
SurferOnWww

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」が増えることを考えると選択するのも大変ですし、あまりスマートではないかなと感じました。 プログラミングは定年退職してから始めたので開発経験がありません。 こういった手法がそもそもオーソドックスなものなのかも判断がつきません。もしあまりよくない方法であればそれもご指摘いただければと思います。
SurferOnWww

2019/04/25 06:01

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

0

ベストアンサー

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

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

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

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

投稿2019/04/26 01:40

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

総合スコア293

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

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

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

このような回答には修正を依頼しましょう。

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

ただいまの回答率
86.02%

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

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

質問する

関連した質問

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

C#

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

Visual Studio

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

.NET Framework 4.0

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