C# 类似Excel筛选功能的DataGridView
时间: 2023-11-22 08:56:33 浏览: 172
在 C# 中,可以使用 DataGridView 控件来实现类似 Excel 筛选的功能。以下是实现方法的简要步骤:
1. 创建一个 DataGridView 控件,并将其添加到窗体中。
2. 将数据源绑定到 DataGridView 控件中。可以使用 DataTable 或 BindingList 等数据源。
3. 添加一个 ComboBox 控件,用于选择要筛选的列。
4. 添加一个文本框控件,用于输入要筛选的值。
5. 在 ComboBox 的 SelectedIndexChanged 事件中,根据选择的列名,过滤数据源中符合条件的行。
6. 将过滤后的数据重新绑定到 DataGridView 控件中。
以下是示例代码:
```csharp
private void Form1_Load(object sender, EventArgs e)
{
// 创建数据源
DataTable dt = new DataTable();
dt.Columns.Add("Name");
dt.Columns.Add("Age");
dt.Rows.Add("Tom", 20);
dt.Rows.Add("Mary", 25);
dt.Rows.Add("John", 30);
// 绑定数据源
dataGridView1.DataSource = dt;
// 添加筛选控件
ComboBox comboBox1 = new ComboBox();
comboBox1.DropDownStyle = ComboBoxStyle.DropDownList;
comboBox1.Items.AddRange(dt.Columns.Cast<DataColumn>().Select(c => c.ColumnName).ToArray());
comboBox1.SelectedIndexChanged += comboBox1_SelectedIndexChanged;
TextBox textBox1 = new TextBox();
textBox1.TextChanged += textBox1_TextChanged;
dataGridView1.Controls.Add(comboBox1);
dataGridView1.Controls.Add(textBox1);
}
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
// 筛选数据
string columnName = (sender as ComboBox).SelectedItem.ToString();
string filter = string.Format("{0} LIKE '%{1}%'", columnName, textBox1.Text);
(dataGridView1.DataSource as DataTable).DefaultView.RowFilter = filter;
}
private void textBox1_TextChanged(object sender, EventArgs e)
{
// 筛选数据
string columnName = comboBox1.SelectedItem.ToString();
string filter = string.Format("{0} LIKE '%{1}%'", columnName, textBox1.Text);
(dataGridView1.DataSource as DataTable).DefaultView.RowFilter = filter;
}
```
在上面的代码中,我们创建了一个简单的数据源,包含三列 Name、Age 和 Address。然后,我们将数据源绑定到 DataGridView 控件中,并添加一个 ComboBox 控件和一个文本框控件,用于选择要筛选的列和输入要筛选的值。
在 ComboBox 的 SelectedIndexChanged 事件和 TextBox 的 TextChanged 事件中,我们使用 DataTable 的 DefaultView.RowFilter 属性来过滤数据,并重新绑定到 DataGridView 控件中。过滤条件使用 LIKE 运算符和通配符 % 来实现模糊匹配。
阅读全文