開発環境は Visual Studio Express 2017 for Windows Desktop
言語はC#、.NET Framework 4.7.2を使用して Windowsフォームアプリケーションを開発しています。
コンボボックスの選択肢には ID + 名称 等を表形式で表示し
コンボボックスがユーザ操作によって選択された場合は、選択後にIDのみを表示したいです。
コンボボックスの選択肢は、データベースから取得するものとします。
(今回はSQL Server 2016 Expressを使用)
現在コンボボックスを作成するにあたり、以下のコードを書きました。
C#
1 public Form1() 2 { 3 InitializeComponent(); 4 5 string sql = "SELECT [No], " 6 + "+ CONVERT(CHAR(3), [No] + ' ') + '|'" 7 + "+ CONVERT(CHAR(10), [ITEM] + ' ') AS Name2 " 8 + "FROM TestTable"; 9 10 DataTable dtDataTable = new DataTable(); 11 12 using (OleDbConnection connection = new OleDbConnection(@"Provider=SQLOLEDB;Data Source=XXXX\SQLEXPRESS;Initial Catalog=XXX;User Id=XX;Password=XX;")) 13 { 14 try 15 { 16 //SQL Server DB接続 17 OleDbDataAdapter adapter = new OleDbDataAdapter(); 18 adapter.SelectCommand = new OleDbCommand(sql, connection); 19 OleDbCommandBuilder builder = new OleDbCommandBuilder(adapter); 20 connection.Open(); 21 //読込 22 adapter.Fill(dtDataTable); 23 } 24 catch (Exception ex) 25 { 26 ; 27 } 28 } 29 30 comboBox1.DataSource = null; 31 comboBox1.Items.Clear(); 32 comboBox1.DataSource = dtDataTable; 33 comboBox1.DisplayMember = "Name2"; 34 comboBox1.ValueMember = "Name2"; 35 comboBox1.FormatString = ""; 36 comboBox1.FormattingEnabled = false; 37 }
ユーザがコンボボックスの選択をした後、コンボボックス上に"番号のみ"を表示するためには、どのようにしたらよいか教えていただけないでしょうか。
なぜそうする必要があるのでしょうか。
UI,UXの観点から「何を選択しているか」が分からないのはよろしくないと思うのですけど。
できるかできないかで言うと大抵のことは「できる」のですが、
「それ意味あるの?」というところが気になっています。
実際のデータは、複数の項目をつなぎ合わせたものを選択肢として出します。
コンボボックスの選択肢として出てくる"イメージ"としては、以下の通りです。
1 | りんご | A1234 | 100mm | 120g |
2 | みかん | B1234 | 110mm | 100g |
・・・
コンボボックスの選択結果には、代表としてNoを表示し、
品名や関連する情報については、別のテキストボックスに表示しますので
何を選択しているのかがわからない状態にはしない予定です。
また、コンボボックスの選択結果は、他のデータを取ってくるのにも利用したいため
Noのみの表示としておきたいのです。
comboBox1のイベントでcomboBox1.ValueMemberを書き換えたら?
UI自体を見直したほうが良いと思うけど…