如何使用 DevExpress 查找栏搜索但不过滤网格视图 table?

How to use a DevExpress Find bar to search but not filter a Grid View table?

我有一个包含大量十六进制数据的网格控件,我希望能够使用提供的查找搜索栏在 table 中搜索特定地址。但是,我不希望它过滤掉 上图 中看到的所有数据。相反,我只想向下滚动到该值而不进行任何过滤 (下图)。我一直在使用 Grid Viewer 对象下的一些 OptionsFind 属性,但其中 none 似乎适用于我当前的情况。有没有办法使用 DevExpress 查找栏来执行此操作,或者我是否需要使用不同的控件?如果可以,如何实现?谢谢!请发表评论以获取更多信息,我将编辑问题。

我对这个问题的解决方案如下。

  • 禁用 OptionsFind 中的查找、清除和关闭按钮
  • 为 GridView 对象创建以下 CustomRowFilter 事件处理程序。 (这可以防止 table 通过在每次尝试过滤时将 handled 属性 设置为 true 来过滤。)
  • 创建一个自定义搜索按钮,在找到包含在 FindFilterText 中的数据所在的行后更改当前聚焦的行。

    private void gridViewDataViewer_CustomRowFilter(object sender, DevExpress.XtraGrid.Views.Base.RowFilterEventArgs e)
    {
        e.Handled = true;
        e.Visible = true;  
    }
    
    
    private void searchButton_Click(object sender, EventArgs e)
    {
        int rowHandle = gridViewDataViewer.LocateByValue("Column Name", gridViewDataViewer.FindFilterText);
        gridViewDataViewer.FocusedRowHandle = gridViewDataViewer.GetVisibleRowHandle(rowHandle);
    
    }
    

您可以使用 CustomRowFilter 来防止网格过滤,并使用 ColumnFilterChanged 来聚焦包含搜索值的行:

private void gridView1_CustomRowFilter(object sender, DevExpress.XtraGrid.Views.Base.RowFilterEventArgs e)
{
    e.Handled = true;
    e.Visible = true;

}

private void gridView1_ColumnFilterChanged(object sender, EventArgs e)
{
    for (int i = 0; i < gridView1.DataRowCount; i++)
    {
        object b = gridView1.GetRowCellValue(i, "Address");
        if (b != null && b.ToString().Contains(gridView1.FindFilterText))
        {
            gridView1.FocusedRowHandle = i;
            return;
        }
    }
}