devexpress gridview过滤器解决方案

时间:2011-07-15 04:39:43

标签: asp.net aspxgridview

我的asp.net页面中有一个devexpress gridview,它有一个过滤行。内置功能需要我从第一个字母过滤而不是之间的字母。

所以“萨”会找到“塞缪尔”而不是“山姆大叔”。要搜索“山姆大叔”,我需要使用%sa%。我的客户不希望这样。

我找到了一个解决方案,要求我对gridview中的每个字段使用Settings-AutoFilterCondition =“Contains”。我在asp.net程序中有超过20s的gridview。

是否可以同时为所有gridview设置默认值?

由于

3 个答案:

答案 0 :(得分:2)

我建议您根据现有主题创建一个新的ASP.NET主题,并在外观文件中更改此属性。在这种情况下,您将收到整个网站所需的结果,而不会更改一行代码:)

答案 1 :(得分:1)

您可以在后面的代码的PageLoad事件中设置它,如下所示:

[VB.NET]
Protected Sub Page_Load(sender As Object, e As EventArgs)
    For Each col As GridViewDataColumn In grid.Columns
        col.Settings.AutoFilterCondition = AutoFilterCondition.Contains
    Next
End Sub

答案 2 :(得分:0)

我通过以下方式实现了这个目标:

  1. 添加了以下扩展方法来减少工作,它返回一个类型的所有控件:

    public static IEnumerable<T> GetAllControlsOfType<T>(this Control parent) where T : Control
    {
        var result = new List<T>();
        foreach (Control control in parent.Controls)
        {
            if (control is T)
            {
                result.Add((T)control);
            }
            if (control.HasControls())
            {
                result.AddRange(control.GetAllControlsOfType<T>());
            }
        }
        return result;
    }
    
  2. 将以下内容添加到我的基页OnLoad事件(继承自页面,我的所有页面继承自),如果您不使用我推荐的基页,否则您可以将其添加到每个页面。

       this.GetAllControlsOfType<ASPxGridView>()
        .SelectMany(gv => gv.Columns.OfType<GridViewDataTextColumn>())
        .ForEach(c => c.Settings.AutoFilterCondition = AutoFilterCondition.Contains);