0

ボタン、テキストボックス、おそらくグリッドビューなど、ページにいくつかの異なるコントロールがあります。ページの読み込み時に、それらの可視性と有効なプロパティを設定します。しかし、私は彼らのIDのような文字列しか持っていません。データベースから取得します

   ControlId  Type     Visible   Enabled

   btnSave    Button      0         0

   txtEdit    TextBox     1         0

ページの読み込みでそれを行う方法を知っていますか?

4

3 に答える 3

2

コントロール 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);
        }

    }

} 
于 2013-07-02T10:04:55.323 に答える
1

ページ コントロールを検索し、以下のようなプロパティを設定する簡単なメソッドを記述します。

注: コードはコンパイルしていません。

private void Page_Load(object sender, System.EventArgs e)
{
    SetControl("txtEdit","ASPxTextBox",1,0);
    SetControl("btnSave","ASPxButton",0,0);
}

private void SetControl(string controlId,string controlType, bool visible, bool enabled)
{ 
    foreach(Control control in Page.Controls)
    {
        if(controlType == "ASPxTextBox" && control is ASPxTextBox && control.Id == controlId)
        {
            var tb = ((ASPxTextBox)control);
            tb.Visible = visible;
            tb.Enabled = enabled;
            break;
        }
        if(controlType == "ASPxButton" && control is  ASPxButton && control.Id == controlId)
        {
            var bt = ((ASPxButton)control);
            bt.Visible = visible;
            bt.Enabled = enabled;
            break;
        }
    }
}
于 2013-07-02T09:52:19.957 に答える