コントロール ID が string[] に読み込まれているとします。
試す :
protected class ControlDescription
{
public string Name { get; set; }
public bool isVisible { get; set; }
public bool isEnabled { get; set; }
public ControlDescription(string _name, int vis, int ena)
{
this.Name = _name;
this.isVisible = (vis == 1);
this.isEnabled = (ena == 1);
}
}
protected void Page_Load(object sender, EventArgs e)
{
List<ControlDescription> CDescriptions = new List<ControlDescription>();
//loop through data from database
//{
//ControlDescription C = new ControlDescription(name,int,ena);
//CDescriptions.Add(C);
//}
foreach (ControlDescription C in CDescriptions)
{
Control Ctrl = this.FindControl(C.Name);
if (Ctrl != null)
{
//Ctrl.Visible = C.isVisible;
DisableControls(Ctrl);
//if (Ctrl is WebControl)
// ((WebControl)Ctrl).Enabled = C.isEnabled;
HideControls(Ctrl);
}
}
}
編集:あなたのコメントに基づいて、コントロールのタイプが必ずしもWebコントロールまたはサブクラスであるとは限らないことを知らない場合があります.2つの関数を追加し、既存のコードの代わりにコードでそれらを使用しました.
private void DisableControls(System.Web.UI.Control control)
{
foreach (System.Web.UI.Control c in control.Controls) {
// Get the Enabled property by reflection.
Type type = c.GetType;
PropertyInfo prop = type.GetProperty("Enabled");
// Set it to False to disable the control.
if ((prop != null)) {
prop.SetValue(c, false, null);
}
// Recurse into child controls.
if (c.Controls.Count > 0) {
this.DisableControls(c);
}
}
}
private void HideControls(System.Web.UI.Control control)
{
foreach (System.Web.UI.Control c in control.Controls) {
// Get the Enabled property by reflection.
Type type = c.GetType;
PropertyInfo prop = type.GetProperty("Visible");
// Set it to False to disable the control.
if ((prop != null)) {
prop.SetValue(c, false, null);
}
// Recurse into child controls.
if (c.Controls.Count > 0) {
this.HideControls(c);
}
}
}