【问题标题】:Filter Datagridview rows using TextBox使用 TextBox 过滤 Datagridview 行
【发布时间】:2015-04-10 13:35:17
【问题描述】:

我有一个绑定的 datagridView,我想使用 TextBox 值对其进行过滤。

我使用了这个代码:

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

        }

    }

但即使我使用相同的代码,此代码也不会过滤 datagridView

在另一个 datagridView 中,它工作得很好。我不知道在哪里

我的代码出错了?

提前致谢。

编辑:

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

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

我该如何解决??

【问题讨论】:

  • 你确定列名(LibService)正确吗?
  • 是的,我确定它是正确的
  • 您是否将事件处理程序绑定到正确的事件?在该方法中放置一个断点并在离开该方法之前检查RowFilter 属性
  • 您查看过生成的过滤器字符串吗?愿意发布吗?
  • 摆脱那个空的try-catch。这对你没有帮助。

标签: c# winforms datagridview filter


【解决方案1】:

DataSource 是一种 BindingSource 而不是 DataTable,所以试试这个代码:

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();


    }

【讨论】:

  • 这是否可以计数并获取 HeaderText 和过滤器?实际上,我不想指定任何特定的标头值。
【解决方案2】:

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

 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;

    }

您只需要使用组合框更改列号,例如...尽情发挥您的想象力。

谢谢。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多