2011-07-15 34 views
2

我有具有过滤排我的asp.net页面内的DevExpress GridView控件。内置功能需要我过滤从第一个字母,而不是中间的字母。的DevExpress GridView的过滤方案

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

我发现,要求我使用设置-AutoFilterCondition =“包含”在gridview的各个领域的解决方案。我在asp.net程序中有20多个gridview。

有其它方法来设置所有GridView控件的默认一次?

感谢

回答

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 
+0

这是对大电网的改善,但如果我理解正确的话,他是希望宽做这个网站。所以每个网页上的每个网格这将是有益的。 – bendemes

+0

好一点,我建议考虑看看柏拉图的评论下面关于创建一个新的主题。这将为整个网站轻松解决。 – Mehul

+0

我没有看到柏拉图的评论?但是当我接近它时,我会主题化。 – bendemes

2

我建议你创建一个基于现有的和变化的新ASP.NET主题这个属性在一个皮肤文件中。在这种情况下,您会收到所需的结果对整个网站,无需改变甚至一行代码:)

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. 以下内容添加到我的BasePage onload事件(从页面继承,和我的所有网页继承),如果你不使用基页我推荐它,否则你可以将它添加到每个页面。

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