📜  csharp datagridview 过滤列 - C# (1)

📅  最后修改于: 2023-12-03 15:14:17.541000             🧑  作者: Mango

C# DataGridView 过滤列

在 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 过滤列

接下来,我们来看如何实现 DataGridView 中的列过滤功能。本文将通过以下两种方法来实现:

1. 使用 DataView 进行过滤
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 控件中。

2. 使用 LINQ 进行过滤
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 进行筛选则更加灵活,可根据实际情况选择使用。