将控件集合设为只读

时间:2018-08-07 14:06:01

标签: c# asp.net generics devexpress

我当前正在使用Devexpress控件在使用Web表单应用程序。我正在使用的控件是(但不限于):

  1. BootstrapComboBox
  2. BootstrapSpinEdit
  3. BootstrapTextBox

表格相当大,所以我想要实现的是例如IEnumerable<T>,然后遍历集合并将ReadOnly属性设置为true。我知道我一次可以做一个控件,但是我有50多个控件,所以我想知道是否有更通用的方法。

我有以下代码段:

public static void MakeControlReadOnly<T>(this IEnumerable<T> controlCollection)
{
   foreach(var c in controlCollection)
      c.ReadOnly = true;
}

但是我不断收到错误消息:

  

严重性代码描述项目文件行抑制状态   错误CS1061'T'不包含'ReadOnly'的定义,找不到可以接受类型为'T'的第一个参数的扩展方法'ReadOnly'(您是否缺少using指令或程序集引用?)

我了解该错误,但不确定如何解决。

2 个答案:

答案 0 :(得分:3)

尝试将隐式类型T用作ASPxEditBase的基础DevExpress

public static void MakeControlReadOnly<T>(this IEnumerable<T> controlCollection)
              where T: ASPxEditBase
{
   controlCollection.ToList().ForEach(x=> x.ReadOnly = true);
}

答案 1 :(得分:2)

您可以对包含readonly属性的基类的泛型施加类型约束

public static void MakeControlReadOnly<T>(this IEnumerable<T> controlCollection) where T: BaseType //Set this to the correct base type
{
   foreach(var c in controlCollection)
      c.ReadOnly = true;
}