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

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

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

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

.NET Framework

.NET Framework は、Microsoft Windowsのオペレーティングシステムのために開発されたソフトウェア開発環境/実行環境です。多くのプログラミング言語をサポートしています。

Q&A

解決済

2回答

6983閲覧

DataGridViewComboBoxColumnでセルとドロップダウンリストの表示を変えたい

you-at4

総合スコア14

C#

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

.NET Framework

.NET Framework は、Microsoft Windowsのオペレーティングシステムのために開発されたソフトウェア開発環境/実行環境です。多くのプログラミング言語をサポートしています。

0グッド

0クリップ

投稿2019/07/23 08:42

前提・実現したいこと

C#でWindowsFormアプリケーションを作成しています。
DataGridViewにComboBoxColumnの列を追加し、
DataTableをDataSourceとして設定しています。
DataTableは以下のように名前とコードが対になるようなデータが入っています。

NameCode
山田1
佐藤2

このComboBoxColumnについて
ドロップダウンリストを表示した際のリストはNameで表示し
セルに表示する値はCodeで表示するようにしたいのですが、
なにか良い方法はないでしょうか?

試したこと

ComboBoxColumnのDisplayMemberを設定してみましたが、
セルに表示される値もドロップダウンリストに表示されるリストも
DisplayMemberに指定したものになってしまいました。

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

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

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

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

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

guest

回答2

0

ベストアンサー

↓ こんな感じでしょうか?

イメージ説明

id (数字) と名前 (文字列) を持つ DataTable を作って ComboBox にバインドしてます。

作り方は以下の記事を見てください。

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

【追記】

下の私の 2019/07/24 10:40 のコメントで「Code と Name を DataGridView に併記するということも可能です。ご参考までに、その例を質問欄に追記しておきます」と書きましたが、それを以下に追記しておきます。

以下のような感じです。CategoryID と CategoryName が質問者さんのケースで言うと Code と Name に該当させられるのではないかと思います。

イメージ説明

作り方は以下の記事を見てください。

DataGridView に ID と名前を併記
http://surferonwww.info/BlogEngine/post/2014/02/01/how-to-show-both-id-and-name-on-datagridview-while-enabling-update.aspx

CategoryID の方を ComboBox で表示することはできると思います。ただ、編集する際、CategoryID と CategoryName に不整合が出るのが気に入らないと言われると、この案はボツですが。

投稿2019/07/23 09:19

編集2019/07/24 01:47
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

YAmaGNZ

2019/07/23 09:34

UIとして適切かどうかという問題はありますが、 質問者さんはComboBoxで選択する時のドロップダウンはNameで、TextはCodeで表示したいということではないでしょうか?
退会済みユーザー

退会済みユーザー

2019/07/23 09:36

質問者さんの返事を待ちたいと思います。(書き間違いではないかと思ってます)
hihijiji

2019/07/23 09:51

書き間違いかどうかは兎も角、質問者さんにはSurferOnWwwさんの案の通り実装されることをお勧めします。 (質問に書いてある通りだとするとユーザに混乱を与えることになるかと)
you-at4

2019/07/24 00:10

SurferOnWwwさん回答ありがとうございます。 申し訳ありませんが、書き間違いではありません。 ユーザー側の指定であり、私も一度この回答のように文字列を表示させてユーザーに提示したのですが却下された次第です。
退会済みユーザー

退会済みユーザー

2019/07/24 00:24

ValueMember と DisplayMember を使い分けるだけで対応できませんか? できないということであれば、その理由を書いてください。
退会済みユーザー

退会済みユーザー

2019/07/24 00:48

ひょっとして、ドロップダウンされてない初期表示は「Name」を表示し、ユーザーが操作してドロップダウンしたときは「Code」を表示したい?
you-at4

2019/07/24 01:12

難しく考えてしまっていたようです。 CellEnterとCellEndEditで対象セルのDisplayMemberを変更することで対応出来ました。 ありがとうございました。
退会済みユーザー

退会済みユーザー

2019/07/24 01:40

Code と Name を DataGridView に併記するということも可能です。ご参考までに、その例を質問欄に追記しておきます
guest

0

解決済みになりましたが
CellFormattingイベントにて書き換えたほうがいいのではないかと思います。

C#

1e.Value = dataGridView1[e.ColumnIndex, e.RowIndex].Value.ToString(); 2e.FormattingApplied = true;

ValueMember = "Code"
DisplayMember = "Name"
の状態で、上記みたいな感じで

投稿2019/07/24 01:34

YAmaGNZ

総合スコア10242

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問