C# 使用TextBox筛选Datagridview行

C# 使用TextBox筛选Datagridview行,c#,winforms,datagridview,filter,C#,Winforms,Datagridview,Filter,我有一个绑定的datagridView,我想使用文本框值对其进行过滤 我使用了以下代码: private void ChercheStextBox_TextChanged(object sender, EventArgs e) { try { ((DataTable)dataGridView3.DataSource).DefaultView.RowFilter = string.Format("LibService like '%{

我有一个绑定的datagridView,我想使用文本框值对其进行过滤

我使用了以下代码:

private void ChercheStextBox_TextChanged(object sender, EventArgs e)
    {
        try
        {
            ((DataTable)dataGridView3.DataSource).DefaultView.RowFilter = string.Format("LibService like '%{0}%'", ChercheStextBox.Text.Trim().Replace("'", "''"));
        }
        catch
        {

        }

    }
private void ChercheStextBox_TextChanged(object sender, EventArgs e)
    {
        var bd = (BindingSource)dataGridView3.DataSource;
        var dt = (DataTable)bd.DataSource;
        dt.DefaultView.RowFilter = string.Format("LibService like '%{0}%'", ChercheStextBox.Text.Trim().Replace("'", "''"));    
        dataGridView3.Refresh();


    }
但是,即使我使用了相同的代码,该代码也不会过滤datagridView

在另一个datagridView中,它可以完美地工作。我不知道房间在哪里

我的代码中有错误吗

提前谢谢

编辑:

我删除了try catch,并收到以下错误消息:

无法将“system.windows.forms.bindingsource”类型的对象强制转换为“system.data.datatable”类型


如何修复它???

数据源是BindingSource而不是DataTable的类型,请尝试以下代码:

private void ChercheStextBox_TextChanged(object sender, EventArgs e)
    {
        try
        {
            ((DataTable)dataGridView3.DataSource).DefaultView.RowFilter = string.Format("LibService like '%{0}%'", ChercheStextBox.Text.Trim().Replace("'", "''"));
        }
        catch
        {

        }

    }
private void ChercheStextBox_TextChanged(object sender, EventArgs e)
    {
        var bd = (BindingSource)dataGridView3.DataSource;
        var dt = (DataTable)bd.DataSource;
        dt.DefaultView.RowFilter = string.Format("LibService like '%{0}%'", ChercheStextBox.Text.Trim().Replace("'", "''"));    
        dataGridView3.Refresh();


    }

我认为你需要使用这种方法:

 public void ChercheStextBox_TextChanged(object sender, EventArgs e)
    {
          //NASSIM LOUCHANI
          BindingSource bs = new BindingSource();
          bs.DataSource = dataGridView3.DataSource;
          bs.Filter = string.Format("CONVERT(" + dataGridView3.Columns[1].DataPropertyName + ", System.String) like '%" + ChercheStextBox.Text.Replace("'", "''") + "%'");
          dataGridView3.DataSource = bs;

    }
您只需使用组合框更改列数,例如。。。发挥你的想象力


谢谢。

您确定列名(LibService)正确吗?是的,我确定正确。您是否已将eventhandler绑定到正确的事件?在该方法中放置一个断点,并在离开该方法之前检查
RowFilter
属性。是否查看了生成的filterstring?想把它寄出去吗?扔掉那个空的试捕器。这对你没有帮助。这能数一数并得到HeaderText和filter吗?实际上,我不想指定任何特定的头值。