C#实现Combobox自动匹配字符
不多说了,如图,应客户要求,下拉框中需要自动匹配字符,可能有些人一早就对此很熟,但相对于我还是首次使用,还是花了一点时间,现记录下来,也希望能帮助大家更好的理解.
首先要设定Combobox的DropDownStyle属性为DropDown,而不是DropDownList.然后设定匹配数据源,有两种方法
第一种.采用CustomSource当做提示集合,自已构造的下拉提示内容.
1 //经营单位 2 3 AutoCompleteStringCollection strings = new AutoCompleteStringCollection(); 4 DataTable dt = customformOp.CusList().Tables[0]; 5 if (dt.Rows.Count > 0) 6 { 7 //cmbTRADE_CO.DisplayMember = "CusName";//显示字段 8 //cmbTRADE_CO.ValueMember = "Cus"; 9 //cmbTRADE_CO.DataSource = dt; 10 //cmbTRADE_CO.SelectedIndex = -1; 11 for (int i = 0; i < dt.Rows.Count; i++) 12 { 13 strings.Add(dt.Rows[i]["CusName"].ToString()); 14 } 15 } 16 17 cmbTRADE_CO.AutoCompleteCustomSource = strings; 18 cmbTRADE_CO.AutoCompleteSource = AutoCompleteSource.CustomSource; 19 cmbTRADE_CO.AutoCompleteMode = AutoCompleteMode.SuggestAppend;
第二种.直接使用下拉列表中的项作为匹配的集合 (请仔细看两代码的区别: cmbTRADE_CO.AutoCompleteSource =??)
1 // AutoCompleteStringCollection strings = new AutoCompleteStringCollection(); 2 DataTable dt = customformOp.CusList().Tables[0]; 3 if (dt.Rows.Count > 0) 4 { 5 cmbTRADE_CO.DisplayMember = "CusName";//显示字段 6 cmbTRADE_CO.ValueMember = "Cus"; 7 cmbTRADE_CO.DataSource = dt; 8 cmbTRADE_CO.SelectedIndex = -1; 9 //for (int i = 0; i < dt.Rows.Count; i++) 10 //{ 11 // strings.Add(dt.Rows[i]["CusName"].ToString()); 12 //} 13 } 14 15 // cmbTRADE_CO.AutoCompleteCustomSource = strings; 16 cmbTRADE_CO.AutoCompleteSource = AutoCompleteSource.ListItems; 17 cmbTRADE_CO.AutoCompleteMode = AutoCompleteMode.SuggestAppend;
其AutoCompleteMode的4种情况各代表:
None:关闭自动补全功能
Suggest:展开下拉列表并显示匹配的结果
Append:自动补全
SuggestAppend:Suggest和Append的组合,即显示下拉列表也自动补全。
最终结果效果图: