当数据量很大的时候,我们就需要用到过滤框,查找那些我们想要的内容。例如,ICD10诊断有接近2w条记录,医生在给病人下诊断的时候就需要使用过滤功能,查找到对应的诊断。在这篇文章里,我们就讲一下如何实现过滤的功能。
1、需要的控件
Label、TextBox、DataGridvew,界面如下图所示:

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