天天看点

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填写内容了之后,就可以过滤了。过滤框可以实现了。

继续阅读