天天看點

C#實作過濾框

當資料量很大的時候,我們就需要用到過濾框,查找那些我們想要的内容。例如,ICD10診斷有接近2w條記錄,醫生在給病人下診斷的時候就需要使用過濾功能,查找到對應的診斷。在這篇文章裡,我們就講一下如何實作過濾的功能。

1、需要的控件

Label、TextBox、DataGridvew,界面如下圖所示:

C#實作過濾框

2、代碼編寫

(1)建立DataTable,設定DataTable的值

/// <summary>
/// 使用datatable過濾
/// </summary>
private DataTable dt = null;

 /// <summary>
        /// 初始化資料表
        /// </summary>
        private void InitDatable()
        {
            dt = new DataTable();

            //建立列
            DataColumn col1 = new DataColumn("編碼", typeof(string));
            DataColumn col2 = new DataColumn("姓名", typeof(string));
            DataColumn col3 = new DataColumn("性别", typeof(string));

            DataColumn col4 = new DataColumn("科室", typeof(string));
            DataColumn col5 = new DataColumn("出生日期", typeof(string));
            DataColumn col6 = new DataColumn("年齡", typeof(string));
            DataColumn col7 = new DataColumn("拼音碼", typeof(string));
            DataColumn col8 = new DataColumn("五筆碼", typeof(string));

            DataColumn col9 = new DataColumn("最近一年服務時數合計", typeof(string));

            //添加列
            dt.Columns.Add(col1);
            dt.Columns.Add(col2);
            dt.Columns.Add(col3);
            dt.Columns.Add(col4);

            dt.Columns.Add(col5);
            dt.Columns.Add(col6);
            dt.Columns.Add(col7);
            dt.Columns.Add(col8);
            dt.Columns.Add(col9);

            //資料表主鍵設定
            DataColumn[] keys = new DataColumn[];
            keys[] = col1;
            dt.PrimaryKey = keys;

            this.dataGridView1.DataSource = dt.DefaultView;
        }
           

我們将DataGridView的資料源設定一下,這一步很重要,如下代碼所示:

我們将DataGridView的資料源指派為dt.DefaultView,因為在使用過濾功能的時候會使用到DefaultView的RowFilter屬性,過濾串就是要指派給RowFilter。我們在文本框的

(2)實作TextBox的TextChanged事件,添加過濾的代碼

private void txtFilter_TextChanged(object sender, EventArgs e)
{
      string filter = "%" + txtFilter.Text + "%";

      Filter(filter);
}

 /// <summary>
        /// 過濾
        /// </summary>
        /// <param name="queryInfo"></param>
        private void Filter(string queryInfo)
        {
            string filterStr = "編碼 like '{0}' or 姓名 like '{0}' or 科室 like '{0}' or 拼音碼 like '{0}' or 五筆碼 like '{0}'";

            if (string.IsNullOrEmpty(queryInfo))
            {
                filterStr = " 1=1 ";
            }
            else
            {
                filterStr = string.Format(filterStr, queryInfo);
            }

            this.dt.DefaultView.RowFilter = filterStr;
        }
           

過濾串的列需要填寫DataTable添加的列,然後将過濾串的内容指派給DataTable的DefaultView的RowFilter屬性:

這樣在TextBox填寫内容了之後,就可以過濾了。過濾框可以實作了。

繼續閱讀