利用winform设计软件界面时,经常用到combobox控件,但有时需要绑定数据表中的数据,更进一步,需要实现对数据表中数据的模糊查询功能。本文就讲讲述如何用C#实现combobox下拉列表的模糊查询。
首先,将数据库某数据表中某列数据绑定到combobox。
(1)选定数据表,获取数据
public static DataTable getAllData(string dbName) { string sql = @"SELECT * FROM " + dbName; //sql数据库操作命令 DataTable dt = DBOperSQL.GetDataTable(sql); return dt; }
dbName为选定的数据表名称,如何在C#中连接数据库,进行数据操作,在上一篇C#操作access和sql server数据库代码实例中,已经讲述,在此不再赘述。
(2)将某列数据绑定到combobox。
public void cmbDownItem(string dbName,string columnName,ComboBox cmb) { DataTable dtCmbCompany = DBOper.getAllData(dbName); if (dtCmbCompany.Rows.Count > 0) { cmb.DataSource = dtCmbCompany; cmb.DisplayMember = columnName; //未起作用 cmb.ItemHeight = 60; cmb.AutoCompleteMode = AutoCompleteMode.SuggestAppend; cmb.AutoCompleteSource = AutoCompleteSource.ListItems; } else { MessageBox.Show("数据表为空"); } }
dbName为需要绑定的数据表名称,columnName为要绑定的数据表该列的列名,cmb为combobox控件的名称。
然后,实现模糊查询的功能。获取combobox控件输入的字符串,查找包含该字符串的数据表中绑定列的元素,自动填充到combobox控件的下拉列表项。
代码实例:
/*autoComplete 是实现combobox自动筛选填充的方法,根据cmb输入,筛选出包含改词的items * 输入 dbName,cmb,txt,column 分别为数据表名,cmb名,cmb内容,和数据表列号(从0开始) */ public void autoComplete(string dbName, ComboBox cmb,string txt,int columnNum) { DataTable dtCmbCompany = DBOper.getAllData(dbName); //string s = dtCmbCompany.Rows[1][1].ToString(); string s; //ListAll获得该列所有数据 //ListSelect筛选出符合要求的数据 List<string> ListAll = new List<string>(); List<string> ListSelect = new List<string>(); for(int i = 0; i < dtCmbCompany.Rows.Count; i++) { s = dtCmbCompany.Rows[i][columnNum].ToString(); ListAll.Add(s); } //MessageBox.Show(dtCmbCompany.Rows.Count.ToString()); //选择数据 cmb.Items.Clear(); //清空listNew ListSelect.Clear(); //遍历全部备查数据 foreach (var item in ListAll) { if (item.Contains(txt)) { //符合,插入ListNew ListSelect.Add(item); } } //cmb.DataSource = ListSelect; cmb.Items.AddRange(ListSelect.ToArray()); // MessageBox.Show(ListSelect[1]); cmb.SelectionStart = txt.Length; //Cursor = Cursors.Default; cmb.DroppedDown = true; }
上面就是如何使用C#给combobox控件绑定数据表列,并且根据输入字符串实现模糊查询的代码实例。最基础的数据库操作代码,在上一篇文章有已经讲到。
初学C#,错误之处,还请指教。