PDA

View Full Version : The control with ID 'ctl17' is not Observable



lily
Oct 19, 2009, 7:40 AM
When CheckBox change,then show error msg "The control with ID 'ctl17' is not Observable "




    protected void Page_Load(object sender, EventArgs e)
    {
        if (!Ext.IsAjaxRequest)
        {
            JBN.Ext.Web.CheckEdit chkedit = new JBN.Ext.Web.CheckEdit(true);
            chkedit.ID = "checkedt";
            chkedit.Text = "Test";
            chkedit.BoxTitle = "MyTest";
            PlaceHolder1.Controls.Add(chkedit);
        }
    }






JBN.Ext.Web.CheckEdit:

 
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Text;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Coolite.Ext.Web;


namespace JBN.Ext.Web
{
    [DefaultProperty("Text")]
    [ToolboxData("<{0}:WebCustomControl2 runat=server></{0}:WebCustomControl2>")]
    public class CheckEdit : Coolite.Ext.Web.Panel
    {
        private string sFieldName, conChar;
        private bool alwaysChecked;


        private Coolite.Ext.Web.Checkbox box = new Checkbox();
        private Coolite.Ext.Web.TextField Edit = new TextField();
        private Coolite.Ext.Web.Label label = new Coolite.Ext.Web.Label();
        private Coolite.Ext.Web.TableLayout tableLayout = new TableLayout();


        public CheckEdit(string DefaultText,string Caption,string fieldName,string CondStr,bool IsChecked,bool IsAwayCheck)
            :this()
        {


            Edit.Text = DefaultText;
            BoxTitle = Caption;
            FieldName = fieldName;
            ConditionChar = CondStr;
            Checked = IsChecked;
            AlwaysChecked = IsAwayCheck;
        }


        public CheckEdit(bool IsChecked)
            : this()
        {


            box.Checked = IsChecked;
            Edit.Enabled = IsChecked;
        }
        public CheckEdit()
        {
            Header = false;
            Border = false;
            this.EnableViewState = true;


            tableLayout.Columns = 3;
            Cell C1 = new Cell();
            Cell C2 = new Cell();
            Cell C3 = new Cell();
            this.BodyControls.Add(tableLayout);
            tableLayout.Cells.Add(C1);
            tableLayout.Cells.Add(C2);
            tableLayout.Cells.Add(C3);
            this.Add(Edit);
            Width = 350;
            Height = 21;
            if (box != null)
            {
                C1.Items.Add(box);
                box.BoxLabel = box.ID;
                box.Height = 21;
                box.AjaxEvents.Check.Event += new ComponentAjaxEvent.AjaxEventHandler(CheckBoxClick) ;
            }
            if (label != null)
            {
                C2.Items.Add(label);
                label.Height = 21;
                label.Width = 100;
            }
            if (Edit != null)
            {
                C3.Items.Add(Edit);
                Edit.AjaxEvents.StateRestore.ViewStateMode = ViewStateMode.Include;
                Edit.Width = 190;
                Edit.Height = 21;
                Edit.Enabled = false;


            }


        }


        [Bindable(true)]
        [Category("Appearance")]
        [DefaultValue("")]
        [Localizable(true)]
        public string Text
        {
            get
            {
                return Edit.Text;
            }


            set
            {
                 Edit.Text = value;
            }
        } 


        [Bindable(true)]
        [Category("Appearance")]
        [DefaultValue("")]
        [Localizable(true)]
        public bool Checked
        {
            get
            {
                return box.Checked;
            }
            set
            {
                box.Checked = value;
            }
        }


        [Bindable(true)]
        [Category("Appearance")]
        [DefaultValue("")]
        [Localizable(true)]
        public string BoxTitle
        {
            get
            {
                return label.Text;
            }
            set
            {
                label.Text = value;
            }
        }


        /*
         * ????:FieldName
         * ??:????
         */
        [Bindable(true)]
        [Category("Appearance")]
        [DefaultValue("")]
        [Localizable(true)]
        public string FieldName
        {
            get
            {
                return sFieldName;
            }
            set
            {
                sFieldName = value;
            }
        }


        /*
         * ??:CheckBox??????
         */
        [Bindable(true)]
        [Category("Appearance")]
        [DefaultValue("")]
        [Localizable(true)]
        public bool AlwaysChecked
        {
            get
            {
                return alwaysChecked;
            }
            set
            {
                Checked = value;
                alwaysChecked = value;
                box.Enabled = !value;


                if (value)
                {
                    Edit.Enabled = true;
                }
            }
        }


        /*
         * ??:???
         */
        [Bindable(true)]
        [Category("Appearance")]
        [DefaultValue("")]
        [Localizable(true)]
        public string ConditionChar
        {
            get
            {
                return conChar;
            }
            set
            {
                conChar = value;
            }
        }


        /*
         * ????:GetQueryValue
         * ????:?????,????
         */
        public string GetQueryValue()
        {
            if (ConditionChar.ToUpper().Equals("LIKE"))
                return FieldName + " " + ConditionChar + " '%" + Text + "%'";
            else
                return FieldName + " " + ConditionChar + " '" + Text + "'";
        }


        private void CheckBoxClick(object sender, AjaxEventArgs e)
        {
           Edit.Enabled = Checked;
        }  
        protected override void RenderContents(HtmlTextWriter output)
        {


        }


        protected override void OnBeforeClientInit(Observable sender)
        {
            base.OnBeforeClientInit(sender);
        }


        protected override void OnUnload(EventArgs e)
        {
            base.OnUnload(e);
        }
    }
}

Vladimir
Oct 19, 2009, 7:47 AM
Hi,

1. Each dynamic control must be recreated during each request (remove Ext.IsAjaxRequest)
2. It is better to set ID for each dynamic control to avoid ids collisions

lily
Oct 19, 2009, 8:06 AM
 ^_^It's Work.


Thank you. vladimir.