📅  最后修改于: 2023-12-03 14:59:39.848000             🧑  作者: Mango
在C#中,使用DataGridView控件展示数据是非常常见的。而有时我们会需要添加搜索功能来过滤数据,使得用户能够快速地找到他们感兴趣的内容。本文将介绍如何给DataGridView添加一个文本框,使得用户可以通过输入关键字来实现对DataGridView的数据进行过滤。
在这个例子中,我们将使用一个名为“NorthwindDatabase”的数据库,里面包含一个名为“Customers”的表格。我们需要先安装SQLite,然后将“NorthwindDatabase”文件夹下的“Northwind.sqlite”文件拷贝到我们的工作目录中。
进入Visual Studio,我们需要先添加一个DataGridView控件和一个TextBox控件。在Form的Load事件中,我们需要为DataGridView绑定数据。由于我们使用的是SQLite数据库,我们需要添加System.Data.SQLite依赖包。
using System.Data.SQLite;
namespace DataGridViewFilterTextBox
{
public partial class Form1 : Form
{
private SQLiteConnection con;
public Form1()
{
InitializeComponent();
InitializeDatabase();
InitializeDataGridView();
}
private void InitializeDatabase()
{
string dataSource = "Data Source=Northwind.sqlite";
con = new SQLiteConnection(dataSource);
con.Open();
}
private void InitializeDataGridView()
{
string query = "SELECT * FROM Customers";
SQLiteDataAdapter adapter = new SQLiteDataAdapter(query, con);
DataTable dataTable = new DataTable();
adapter.Fill(dataTable);
dataGridView1.DataSource = dataTable;
}
}
}
我们需要给Form添加一个TextBox控件。为了便于用户输入关键字,我们需要在其右上方添加清除按钮。在Visual Studio的工具箱中,我们可以找到Button控件,并将其拖拽到TextBox控件的右侧。将其名字设置为“clearButton”,并设置Text属性为“X”。
为了让用户能够通过TextBox去过滤DataGridView的数据,我们需要在TextBox的TextChanged事件发生时更新DataGridView的数据源。我们先将过滤方法写出来:
private void FilterDataGrid(string columnName, string keyword)
{
string query = $"SELECT * FROM Customers WHERE {columnName} LIKE @keyword";
SQLiteDataAdapter adapter = new SQLiteDataAdapter(query, con);
adapter.SelectCommand.Parameters.AddWithValue("@keyword", $"%{keyword}%");
DataTable dataTable = new DataTable();
adapter.Fill(dataTable);
dataGridView1.DataSource = dataTable;
}
该方法会接收一个columnName和一个keyword参数,用于指定过滤的列名和关键字。该方法的作用是将符合条件的数据查询出来后更新DataGridView的数据源。
下一步,我们需要在TextBox的TextChanged事件中调用FilterDataGrid方法:
private void textBox1_TextChanged(object sender, EventArgs e)
{
if (textBox1.Text.Trim() == "")
{
InitializeDataGridView();
}
else
{
FilterDataGrid("ContactName", textBox1.Text.Trim());
}
}
当用户输入内容到TextBox中时,TextChanged事件会被触发。我们判断TextBox是否为空,如果为空,则还原DataGridView的数据源为原始数据;否则,调用FilterDataGrid方法进行过滤。
最后,还需要为clearButton添加Click事件,当用户点击该按钮时,我们将TextBox清空即可:
private void clearButton_Click(object sender, EventArgs e)
{
textBox1.Text = "";
}
using System;
using System.Data;
using System.Data.SQLite;
using System.Windows.Forms;
namespace DataGridViewFilterTextBox
{
public partial class Form1 : Form
{
private SQLiteConnection con;
public Form1()
{
InitializeComponent();
InitializeDatabase();
InitializeDataGridView();
}
private void InitializeDatabase()
{
string dataSource = "Data Source=Northwind.sqlite";
con = new SQLiteConnection(dataSource);
con.Open();
}
private void InitializeDataGridView()
{
string query = "SELECT * FROM Customers";
SQLiteDataAdapter adapter = new SQLiteDataAdapter(query, con);
DataTable dataTable = new DataTable();
adapter.Fill(dataTable);
dataGridView1.DataSource = dataTable;
}
private void FilterDataGrid(string columnName, string keyword)
{
string query = $"SELECT * FROM Customers WHERE {columnName} LIKE @keyword";
SQLiteDataAdapter adapter = new SQLiteDataAdapter(query, con);
adapter.SelectCommand.Parameters.AddWithValue("@keyword", $"%{keyword}%");
DataTable dataTable = new DataTable();
adapter.Fill(dataTable);
dataGridView1.DataSource = dataTable;
}
private void textBox1_TextChanged(object sender, EventArgs e)
{
if (textBox1.Text.Trim() == "")
{
InitializeDataGridView();
}
else
{
FilterDataGrid("ContactName", textBox1.Text.Trim());
}
}
private void clearButton_Click(object sender, EventArgs e)
{
textBox1.Text = "";
}
}
}
本文介绍了如何使用TextBox和DataGridView控件实现搜索功能。有了搜索功能,让用户能够快速查找需要的数据,使得我们的应用更加友好易用。