禁用QueryableFilterRepeater中的过滤器控制

本文关键字:过滤器 控制 QueryableFilterRepeater 禁用 | 更新日期: 2023-09-27 18:08:49

如果满足某些条件,我想在QueryableFilterRepeater中使一个或多个过滤器控件只读。

foreach (Control c in FilterRepeater.Controls)
{
    //c is of type FilterRepeaterItem
}

我可以访问它的控制,但我不知道如何禁用一个。它们的类型是FilterRepeaterItem,这是QueryableFilterRepeater的内部类,所以我不能将它们转换为该类型,以便获得过滤器的包装控制(例如DropDownList)并将其启用属性设置为false;

有解决这个问题的方法吗?我怀疑是否有一个适用于所有类型的过滤器(假设底层控件不同,而不是所有的下拉列表),但至少有一个我知道它是下拉列表。

禁用QueryableFilterRepeater中的过滤器控制

我已经找到了一个解决方案,我将把它留在这里,以防别人偶然发现。

foreach (Control c in FilterRepeater.Controls)
{
    var dynamicFilter = c.Controls.OfType<DynamicFilter>().FirstOrDefault();
    if (dynamicFilter == null)
        continue;
    QueryableFilterUserControl filterTemplate = dynamicFilter.FilterTemplate as QueryableFilterUserControl;
    if (filterTemplate == null)
        continue;
    WebControl filterControl = filterTemplate.FilterControl as WebControl;
    if (filterControl == null)
        continue;
    //now we have access to the filter control
    filterControl.Enabled = false; 
}