![](/img/trans.png)
[英]How to filter C# Winform datagridview that was created with Visual Studio
[英]Filter a DataGridView with Textbox in Visual Studio C#
我正在尝试创建一个软件,其中包含用户在datagridtextcell
手动添加的信息。 它的目的是之后用Textbox
过滤DataGridView
。 软件应该过滤掉文本信息并显示包含与TextBox
相关的文本信息的行。
我不使用 MySQL 或任何与数据库相关的东西。
我使用名为textBox1
的Textbox
并使用其TextChanged
事件。 用户在dataGridView1
名为 indexView、kategorieView 和 inhaltView 的 3 个表中写入数据。
当我在TextBox
输入数据时会发生什么,它只是将DataGridView
重置为零内容。
我是 Visual Studio 和 C# 的初学者。 我有 C 语言的基础知识。
public partial class Form1 : Form
{
private DataGridViewTextBoxColumn iView;
private DataGridViewTextBoxColumn kView;
private DataGridViewTextBoxColumn cView;
public Form1()
{
InitializeComponent();
}
private void textBox1_TextChanged(object sender, EventArgs e)
{
BindingSource bs = new BindingSource();
bs.DataSource = dataGridView1.DataSource;
bs.Filter = "indexView like '%" + textBox1.Text + "%'";
bs.Filter = "kategorieView like '%" + textBox1.Text + "%'";
bs.Filter = "inhaltView like '%" + textBox1.Text + "%'";
dataGridView1.DataSource = bs;
}
private void Form1_Load(object sender, EventArgs e)
{
indexView = iView;
kategorieView = kView;
inhaltView = cView;
}
}
原因可能是 DataGridView 的数据源始终为null
。 可以尝试定义一个DataTable
来存储数据,然后作为BindingSource
的DataSource
使用。
private void textBox1_TextChanged(object sender, EventArgs e)
{
// Define a datatable
DataTable dt = new DataTable("tablename");
DataRow dr;
dt.Columns.Add("iView", System.Type.GetType("System.String"));
dt.Columns.Add("kView", System.Type.GetType("System.String"));
dt.Columns.Add("cView", System.Type.GetType("System.String"));
for (int i = 0; i < this.dataGridView1.Rows.Count -1; i++)
{
dr = dt.NewRow();
for (int j = 0; j < 3; j++)
{
dr[j] = this.dataGridView1.Rows[i].Cells[j].Value.ToString();
}
dt.Rows.Add(dr);
}
// Filter
BindingSource bs = new BindingSource();
bs.DataSource = dt;
bs.Filter = "iView like '%" + textBox1.Text + "%'";
bs.Filter = "kView like '%" + textBox1.Text + "%'";
bs.Filter = "cView like '%" + textBox1.Text + "%'";
// Reset the datagridview content
dataGridView1.Columns.Clear();
dataGridView1.DataSource = bs;
}
结果,
根据文档,您应该先调用RemoveFilter 。
...此外,当数据源更改时,过滤器值将保持不变。 要停止过滤数据源,请调用 RemoveFilter 方法。
我没有提出让我满意的解决方案。
所以将整个项目刷到本地数据库。 那里有很多在线教程和许多好的解决方案。
我学到了一些重要的东西,我感谢大家的帮助。
-主题关闭-
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.