部分一致検索が可能なコンボボックスを作成しようとしています。
開発環境は Visual Studio Express 2017 for Windows Desktop
言語はC#、.NET Framework 4.7.2を使用しています。
こちらのWebサイトを参考とし、
下記のようなテストプログラムを作成しました。
C#
1 DataTable _dt = new DataTable(); 2 3 public Form1() 4 { 5 InitializeComponent(); 6 } 7 8 private void Form1_Load(object sender, EventArgs e) 9 { 10 //サンプルデータの処理 11 DataColumn dc = new DataColumn(); 12 dc.ColumnName = "Text"; 13 dc.DataType = typeof(string); 14 this._dt.Columns.Add(dc); 15 DataRow dr = this._dt.NewRow(); 16 dr[0] = "相田"; 17 this._dt.Rows.Add(dr); 18 dr = this._dt.NewRow(); 19 dr[0] = "相川"; 20 this._dt.Rows.Add(dr); 21 dr = this._dt.NewRow(); 22 dr[0] = "井上"; 23 this._dt.Rows.Add(dr); 24 dr = this._dt.NewRow(); 25 dr[0] = "井川"; 26 this._dt.Rows.Add(dr); 27 dr = this._dt.NewRow(); 28 dr[0] = "井本"; 29 this._dt.Rows.Add(dr); 30 dr = this._dt.NewRow(); 31 dr[0] = "宇野"; 32 this._dt.Rows.Add(dr); 33 dr = this._dt.NewRow(); 34 dr[0] = "宇田"; 35 this._dt.Rows.Add(dr); 36 dr = this._dt.NewRow(); 37 dr[0] = "井田"; 38 this._dt.Rows.Add(dr); 39 40 DataView dv = this._dt.DefaultView; 41 this.comboBox1.DataSource = dv; 42 this.comboBox1.DisplayMember = "Text"; 43 this.comboBox1.ValueMember = "Text"; 44 } 45 46 private void comboBox1_KeyDown(object sender, KeyEventArgs e) 47 { 48 DataView dv = this._dt.DefaultView; 49 dv.RowFilter = "Text LIKE '*" + this.comboBox1.Text + "*'"; 50 }
コンボボックスのKeyDownイベントで絞り込みが行われますが
絞り込み実行後、BackSpaceキーで文字を消した場合(空白にした場合)
選択肢が絞り込み後のものとなっておりリセットされないという問題を抱えています。
※ リセットされない・・・絞り込みを行う前の選択肢の状態に戻らない の意味
以下のイベントを追加しましたが、状況は改善していません。
C#
1 private void comboBox1_TextChanged(object sender, EventArgs e) 2 { 3 ComboBox cmb = (ComboBox)sender; 4 // 入力文字なければ 5 if (string.IsNullOrEmpty(cmb.Text) == true) 6 { 7 // 選択肢をリセット 8 cmb.DataSource = _dt; 9 } 10 }
実現方法についてご教示いただけないでしょうか。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/10/01 01:17
退会済みユーザー
2020/10/01 02:35
2020/10/02 00:58
退会済みユーザー
2020/10/02 09:09
2020/10/05 01:37