📅  最后修改于: 2023-12-03 15:14:17.541000             🧑  作者: Mango
在 C# 中,DataGridView 是用于显示数据的一个非常强大的控件。在某些情况下,用户需要对显示的数据进行筛选或搜索。本文将介绍如何对 DataGridView 中的列进行筛选或搜索,以满足用户的需求。
在开始编写过滤列的代码之前,我们需要先创建一个 Windows 窗体应用程序工程,并创建一个 DataGridView 控件,同时为其添加列和行。示例代码如下:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
// 添加列
dataGridView1.Columns.Add("ID", "ID");
dataGridView1.Columns.Add("Name", "Name");
dataGridView1.Columns.Add("Gender", "Gender");
dataGridView1.Columns.Add("Age", "Age");
// 添加行
dataGridView1.Rows.Add(new object[] { "1", "张三", "男", "25" });
dataGridView1.Rows.Add(new object[] { "2", "李四", "女", "26" });
dataGridView1.Rows.Add(new object[] { "3", "王五", "男", "27" });
dataGridView1.Rows.Add(new object[] { "4", "赵六", "女", "28" });
}
}
接下来,我们来看如何实现 DataGridView 中的列过滤功能。本文将通过以下两种方法来实现:
private void textBox1_TextChanged(object sender, EventArgs e)
{
// 获取用户输入的关键字
string keyword = textBox1.Text;
// 将 DataGridView 中的数据转换成 DataView
DataView dv = (DataView)dataGridView1.DataSource;
// 使用关键字对 DataView 中的数据进行筛选
dv.RowFilter = string.Format("Name like '%{0}%' or Gender like '%{0}%' or Age like '%{0}%'", keyword);
// 更新显示的数据
dataGridView1.DataSource = dv;
}
上述代码中,我们首先获取用户输入的关键字,然后将 DataGridView 中的数据转换成 DataView 对象。接着,使用 DataView 中的 RowFilter 属性对数据进行筛选,最后将结果更新到 DataGridView 控件中。
private void textBox1_TextChanged(object sender, EventArgs e)
{
// 获取用户输入的关键字
string keyword = textBox1.Text;
// 获取 DataGridView 中的数据
var data = (from DataGridViewRow row in dataGridView1.Rows
select new
{
ID = row.Cells["ID"].Value.ToString(),
Name = row.Cells["Name"].Value.ToString(),
Gender = row.Cells["Gender"].Value.ToString(),
Age = row.Cells["Age"].Value.ToString()
}).ToList();
// 使用 LINQ 进行筛选
var result = data.Where(d => d.Name.Contains(keyword) || d.Gender.Contains(keyword) || d.Age.Contains(keyword)).ToList();
// 更新显示的数据
dataGridView1.DataSource = result;
}
上述代码中,我们先获取 DataGridView 中的数据,然后使用 LINQ 进行筛选,最后将结果更新到 DataGridView 控件中。
以上是使用 C# 实现 DataGridView 中列的过滤功能的两种方法。其中,DataView 的过滤功能更为简单直接,而使用 LINQ 进行筛选则更加灵活,可根据实际情况选择使用。