繁体   English   中英

在 Visual Studio C# 中使用文本框过滤 DataGridView

[英]Filter a DataGridView with Textbox in Visual Studio C#

我正在尝试创建一个软件,其中包含用户在datagridtextcell手动添加的信息。 它的目的是之后用Textbox过滤DataGridView 软件应该过滤掉文本信息并显示包含与TextBox相关的文本信息的行。

我不使用 MySQL 或任何与数据库相关的东西。

我使用名为textBox1Textbox并使用其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来存储数据,然后作为BindingSourceDataSource使用。

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM