【问题标题】:How to filter datagridview using a textbox in C#?如何使用 C# 中的文本框过滤 datagridview?
【发布时间】:2011-10-23 04:58:40
【问题描述】:

我厌倦了使用文本框过滤 datagridview,文本框包含在标签页中,但它不起作用,这里是代码:

    private void textBox1_TextChanged(object sender, EventArgs e)
    {
        try
        {
            ((DataTable)dataGridView1.DataSource).DefaultView.RowFilter = "like '%" + textBox1.Text.Trim() + "%' ";
        }
        catch (Exception) { }

    }

【问题讨论】:

  • 你有被捕获的异常吗?
  • 语法错误:“Like”运算符之前缺少操作数。

标签: c# winforms datagridview filter


【解决方案1】:

RowFilter 允许您根据列值指定过滤器。所以LIKE 适用于特定列,而不是整行。所以你的条件应该是

"YourColumn like '%" + textBox1.Text.Trim() + "%'

另外,不要忘记 TextBox 可以包含 ' 字符,因此您需要对其进行转义:

"YourColumn like '%" + textBox1.Text.Trim().Replace("'", "''") + "%'

或者,更清洁:

string.Format("YourColumn like '%{0}%'", textBox1.Text.Trim().Replace("'", "''"));

【讨论】:

  • +1 我认为您应该澄清“适用于列”,因为它可能会在以后混淆某人。
  • @Code Monkey,我不确定我该如何澄清......你会怎么说?
  • 我想解释一下,虽然它是 RowFilter,但您正在使用 column 中的值来过滤 。无论如何,这是我的建议。
【解决方案2】:

试试这个,不管那个字母在哪里(开头、中间或结尾),它都在搜索字母

    private void TextBox1_TextChanged(object sender, EventArgs e)
    {
        try
        {
            //this code is used to search Name on the basis of TextBox1.text
            ((DataTable)dataGridView1.DataSource).DefaultView.RowFilter = string.Format("Column_Name like '%{0}%'", TextBox1.Text.Trim().Replace("'", "''"));
        }
        catch (Exception) 
        {

        }
    }

这一个从第一个字母开始搜索,然后一个接一个。

try
        {
            ((DataTable)dataGridViewX1.DataSource).DefaultView.RowFilter = "Column_Name like'" + textBox1.Text.Trim().Replace("'", "''") + "%'";
        }
        catch (Exception)
        {

        }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-31
    • 1970-01-01
    • 1970-01-01
    • 2016-08-29
    相关资源
    最近更新 更多