⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 autosuggestbox.cs

📁 具有Ajax自动建议功能的textBOX的源码。比较适合开发多种功能的TEXTBOX.
💻 CS
📖 第 1 页 / 共 2 页
字号:
		}
        
		public string MenuItemCSSClass
		{
            get { return ViewState["MenuItemCSSClass"] == null ? "asbMenuItem" : ViewState["MenuItemCSSClass"].ToString(); }
            set { ViewState["MenuItemCSSClass"] = value; }
		}
        
		public string SelectedMenuItemCSSClass
		{
			get { return ViewState["SelectedMenuItemCSSClass"] == null ? "asbSelMenuItem" : ViewState["SelectedMenuItemCSSClass"].ToString(); }
			set { ViewState["SelectedMenuItemCSSClass"] = value; }
		}
        
		public bool UseIFrame
		{
            get { return ViewState["UseIFrame"] == null ? true : Convert.ToBoolean(ViewState["UseIFrame"]); }
            set { ViewState["UseIFrame"] = value; }
		}

        public string CallBackControlID
        {
            get { return ViewState["CallBackControlID"] == null ? this.ClientID : ViewState["CallBackControlID"].ToString(); }
            set { ViewState["CallBackControlID"] = value; }
        }
        	   
		public string TextBoxID
		{
			get	{
				this.EnsureChildControls();
				return this._textBox.ClientID;
			}
		}

		private string MenuDivID
		{
			get	{return "divMenu_" + this.TextBoxID;}
		}

		/// <summary>
		/// Indicates if the field is required
		/// </summary>
		[Description("Indicates if the field is required")]
        public bool Required
        {
            get { return ViewState["Required"] == null ? false : Convert.ToBoolean(ViewState["Required"]); }
            set { ViewState["Required"] = value; }
        }

		/// <summary>
		/// RequiredFieldValidator error message
		/// </summary>
		[Description("RequiredFieldValidator error message")]
        public string ErrorMessage
        {
            get { return ViewState["ErrorMessage"] == null ? "This field is required" : ViewState["ErrorMessage"].ToString(); }
            set { ViewState["ErrorMessage"] = value; }
        }

		/// <summary>
		/// RequiredFieldValidator validation group
		/// </summary>
		[Description("RequiredFieldValidator validation group")]
        public string ValidationGroup
        {
            get { return ViewState["ValidationGroup"] == null ? "" : ViewState["ValidationGroup"].ToString(); }
            set { ViewState["ValidationGroup"] = value; }
        }

        public string TableHeaderCssClass
        {
            get { return ViewState["TableHeaderCssClass"] == null ? "" : ViewState["TableHeaderCssClass"].ToString(); }
            set { ViewState["TableHeaderCssClass"] = value; }
        }

        public string TableCssClass
        {
            get { return ViewState["TableCssClass"] == null ? "" : ViewState["TableCssClass"].ToString(); }
            set { ViewState["TableCssClass"] = value; }
        }
				
        public string DataKeyField
        {
            get { return ViewState["DataKeyField"] == null ? "" : ViewState["DataKeyField"].ToString(); }
            set { ViewState["DataKeyField"] = value; }
        }

		/// <summary>
		/// The field that will be displayed on the textbox after an item is selected
		/// </summary>
		[Description("The field that will be displayed on the textbox after an item is selected")]
        public string TextBoxDisplayField
        {
            get { return ViewState["TextBoxDisplayField"] == null ? "" : ViewState["TextBoxDisplayField"].ToString(); }
            set { ViewState["TextBoxDisplayField"] = value; }
        }

        public Unit Width
        {
            get { return ViewState["Width"] == null ? new Unit("200px") : (Unit)ViewState["Width"]; }
            set { ViewState["Width"] = value; }
        } 
		#endregion
        
        #region GetFirst

        private Control GetFirstCtrl(string sCtrlType, ControlCollection colControls)
        {

            Control oFirstCtrl = null;

            foreach (Control oCtrl in colControls)
            {
                //Check if control type matches sCtrlType 
                if (oCtrl.GetType().ToString() == sCtrlType)
                {
                    //Make sure the control is visible
                    if (oCtrl.Visible)
                        return oCtrl;
                    else
                        continue;
                }


                if (oCtrl.HasControls())
                {
                    oFirstCtrl = GetFirstCtrl(sCtrlType, oCtrl.Controls);
                    if (oFirstCtrl != null)
                        break;
                }
            }

            return oFirstCtrl;
        }

        private bool IsTopASBCtrl()
        {
            Control oCtrl = GetFirstCtrl("ASB.AutoSuggestBox", Page.Controls);
            if (oCtrl == null)
                return false;

            if (oCtrl.ClientID == this.ClientID)
                return true;
            else
                return false;
        } 
        #endregion
		
        	
		/// <summary>
		/// Writes the initialization javascript code for the control
		/// </summary>
		/// <param name="output">Page output</param>
		protected void WriteJSAutoSuggestBox(HtmlTextWriter output)
		{
            //Check if this is the first visible ASP control on the page
            if (this.IsTopASBCtrl())
            {
                //Declare auto suggest box object
                output.WriteLine("<script language=\"javascript\">");
                output.WriteLine("<!--");

                output.WriteLine("var oJSAutoSuggestBox;");

                output.WriteLine("//-->");
                output.WriteLine("</script>");
                output.WriteLine("");
            }

			output.WriteLine("<script language=\"javascript\">");
			output.WriteLine("<!--");

            output.Write(GetInitializationScript());

			output.WriteLine("//-->");
			output.WriteLine("</script>");
			output.WriteLine("");

            //Validation Script
            if (this.Required)
            {
                string str = @"<script type=""text/javascript"">
                                //![CDATA[
                                function " + this.ClientID + @"ClientValidate(sender, args)
                                {
                                      args.IsValid = !(args.Value == '' || args.Value == '0');
                                      return;                                    
                                }
                               //]]>
                            </script>";

                output.Write(str);
            }			
		}

		/// <summary>
		/// Returns the javascript code necessary to instanciate the object that represents the control
		/// </summary>		
        private string GetInitializationScript()
        {
            StringBuilder str = new StringBuilder();

            str.Append("oJSAutoSuggestBox=new JSAutoSuggestBox();");

            str.Append("oJSAutoSuggestBox.msTextBoxID='" + this.TextBoxID + "';");
            str.Append("oJSAutoSuggestBox.msMenuDivID='" + this.MenuDivID + "';");            
            str.Append("oJSAutoSuggestBox.mnMaxSuggestChars=" + this.MaxSuggestChars.ToString() + ";");
            str.Append("oJSAutoSuggestBox.mnKeyPressDelay=" + this.KeyPressDelay.ToString() + ";");
            str.Append("oJSAutoSuggestBox.msMenuCSSClass='" + this.MenuCSSClass + "';");
            str.Append("oJSAutoSuggestBox.msMenuItemCSSClass='" + this.MenuItemCSSClass + "';");
            str.Append("oJSAutoSuggestBox.msSelMenuItemCSSClass='" + this.SelectedMenuItemCSSClass + "';");
            str.Append("oJSAutoSuggestBox.mbUseIFrame=" + this.UseIFrame.ToString().ToLower() + ";");            
            str.Append("oJSAutoSuggestBox.ControlID='" +  this.CallBackControlID + "';");
            str.Append("oJSAutoSuggestBox.HiddenTextBoxID='" + this._hiddenTextBox.ClientID + "';");            
            str.Append("oJSAutoSuggestBox.AutoCallBack=" + this.AutoCallBack.ToString().ToLower() + ";");
            str.Append("oJSAutoSuggestBox.mnSelMenuItem=0;");
            str.Append("oJSAutoSuggestBox.BlankPageURL='" + Page.ClientScript.GetWebResourceUrl(this.GetType(),
                                                        "Anthem.includes.Blank.html") + "';");
                      

            str.Append("asbAddObj('" + this.TextBoxID + "', oJSAutoSuggestBox);");

            return str.ToString();
        }

		/// <summary>Renders AutoSuggestBox to the output HTML parameter specified.</summary>
		/// <param name="output"> The HTML writer to write out to</param>
		protected override void Render(HtmlTextWriter output)
		{
			if(!DesignMode)
				RegisterClientScript();

            if (!Manager.IsCallBack)
                WriteJSAutoSuggestBox(output);
            else
                Manager.AddScriptForClientSideEval(GetInitializationScript());
            
			string sObj="asbGetObj('" + this.TextBoxID + "')";

			//Set the javascript event handlers
            this._textBox.Attributes["onblur"] = sObj + ".OnBlur();";
            this._textBox.Attributes["onkeydown"] = sObj + ".OnKeyDown(event);";
            this._textBox.Attributes["onkeypress"] = "return " + sObj + ".OnKeyPress(event);";
            this._textBox.Attributes["onkeyup"] = sObj + ".OnKeyUp(event);";
            this._textBox.Attributes["autocomplete"] = "off";

			AnthemDefaultRenderCode(output);				
		}


		private void AnthemDefaultRenderCode(HtmlTextWriter output)
		{
			if (!DesignMode)
			{
				// parentTagName must be defined as a private const string field in this class.
				Anthem.Manager.WriteBeginControlMarker(output, "span", this);
			}
			if (Visible)
			{
				base.Render(output);

				output.WriteLine("<br><div class='" + this.MenuCSSClass + "' style='visibility:hidden;' id='" + this.MenuDivID + "'></div>");
			}
			if (!DesignMode)
			{
				Anthem.Manager.WriteEndControlMarker(output, "span", this);
			}
		}        

        #region GetSuggestions
        public delegate void TextChangedEventHandler(object source, AutoSuggestEventArgs e);
        public event TextChangedEventHandler TextChanged;

        public delegate void SelectedValueChangedHandler(object source, EventArgs e);
        public event SelectedValueChangedHandler SelectedValueChanged;

		public delegate void ItemDataBoundHandler(object source, AutoSuggestItemEventArgs e);
		public event ItemDataBoundHandler ItemDataBound;
        
        [Anthem.Method]
        public void GetSuggestions(string text)
        {
            if (TextChanged != null)
                TextChanged(this, new AutoSuggestEventArgs(text));
        }

		/// <summary>
		/// This method is supposed to be called everytime the suggested list changes,
		/// usually when the SelectedValueChanged event is fired
		/// </summary>
		public override void DataBind()
		{
			if (DataSource == null) return;

			HtmlTextWriter writer = new HtmlTextWriter(new StringWriter());

			int i = 0;

			//Header template
			if (HeaderTemplate != null)
			{
				AutoSuggestItem item = new AutoSuggestItem(-1, "", AutoSuggestItemType.Header);
				HeaderTemplate.InstantiateIn(item);
				//Fires the ItemDataBound event
				if (ItemDataBound != null)
					ItemDataBound(this, new AutoSuggestItemEventArgs(item));

				if (item.Controls.Count > 0)
				{
					foreach (Control control in item.Controls)
					{
						control.RenderControl(writer);
					}
				}
			}


			//ItemTemplate				
			IEnumerator dataEnum = DataSource.GetEnumerator();
			while (dataEnum.MoveNext())
			{
				// Find out if its an alternating item
				AutoSuggestItemType itemType = (i + 1)%2 == 0 ? AutoSuggestItemType.AlternatingItem : AutoSuggestItemType.Item;
				//Creates the item
				AutoSuggestItem item = new AutoSuggestItem(i, dataEnum.Current, itemType);
				if (this.ItemTemplate != null)
					this.ItemTemplate.InstantiateIn(item);

				HtmlTextWriter w = new HtmlTextWriter(new StringWriter());
				AutoSuggestMenuItem asbItem = new AutoSuggestMenuItem();
				asbItem.CSSClass = this.MenuItemCSSClass;


				item.DataBind();

				//Fires the ItemDataBound event before rendering the item
				if (ItemDataBound != null)
					ItemDataBound(this, new AutoSuggestItemEventArgs(item));

				item.RenderControl(w);

				asbItem.Text = w.InnerWriter.ToString();
				if (DataKeyField != "")
					asbItem.Value = GetField(item, this.DataKeyField);

				asbItem.TextBoxText = GetField(item, this.TextBoxDisplayField);

				writer.WriteLine(asbItem.GenHtml(i + 1, this.TextBoxID));
				this.Controls.Add(item);
				i++;
			}


			string html = "";
			if (i > 0)
			{
				html = string.Format("<table style=\"width:{0}\"><tr><td>{1}</td></tr></table>",
				                     this.Width.ToString(),
				                     writer.InnerWriter.ToString());
			}
			else
			{
				html =
					string.Format(
						"<table style=\"width:{0}\"><tr><td align=\"center\" style=\"color:red;\"><b>{1}</b></td></tr></table>",
						this.Width.ToString(),
						this.ItemNotFoundMessage);
			}
			StringBuilder sb = new StringBuilder();
			Manager.WriteValue(sb, html);

			string script = string.Format("asbGetObj('{0}').ShowMenuDiv({1});", this.TextBoxID, sb.ToString());
			Manager.AddScriptForClientSideEval(script);
		}


    	private string GetField(AutoSuggestItem item, string field)
        {
			
			if (item.DataItem is DataRowView)
				return ((DataRowView)item.DataItem)[field].ToString();
			else if (item.DataItem is DataRow)
				return ((DataRow)item.DataItem)[field].ToString();
			else if (item.DataItem is ICollection)
			{
				Type type = item.DataItem.GetType();
				MethodInfo m = type.GetMethod("get_Item");
				return m.Invoke(item.DataItem, new object[] { field }).ToString();
			}
			else
			{
				//Here we use reflection to get the value of the any field of the defined 
				//in the DataItem property of AutoSuggestItem
				Type type = item.DataItem.GetType();
				FieldInfo fieldInfo = type.GetField(field);
				if (fieldInfo != null)
					return fieldInfo.GetValue(item.DataItem).ToString();
				else
				{
					PropertyInfo prop = type.GetProperty(field);
					if (prop != null)
						return prop.GetValue(item.DataItem, null).ToString();
				}
			}
			throw new Exception("The datasource type is not supported");
        }

        [Anthem.Method]
        public void FireSelectedValueChangedEvent(string newValue)
        {
            this.SelectedValue = newValue;
            if (SelectedValueChanged != null)
                SelectedValueChanged(this, new EventArgs());
        }
        #endregion
       
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -