📄 combobox.cs
字号:
using System;
using System.ComponentModel;
using System.Collections;
using System.IO;
using System.Globalization;
using System.Resources;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Reflection;
namespace Bestcomy.Web.UI.WebControls
{
/// <summary>
///
/// </summary>
[ToolboxData("<{0}:ComboBox runat=server></{0}:ComboBox>"),ParseChildren(true,"Items"),PersistChildren(false),DefaultProperty("ID"),Designer(typeof(ComboBoxDesigner))]
public class ComboBox : WebControl, INamingContainer, IPostBackDataHandler
{
private string _text = string.Empty;
private ComboItemCollection _items = new ComboItemCollection();
private object dataSource;
public ComboBox() : base("DEADBEEF:COMBOBOX")
{
}
[Browsable(true)]
public string Text
{
get
{
if(_text == string.Empty)
{
if(this.SelectedItem != null)
_text = this.SelectedItem.Text;
else if(this.Items.Count > 0)
{
this.Items[0].Selected = true;
_text = this.Items[0].Text;
}
}
return _text;
}
set
{
this._text = value;
this.ClearSelection();
}
}
[Browsable(true)]
public bool ReadOnly
{
get
{
return !this.Enabled;
}
set
{
this.Enabled = !value;
}
}
//[DesignerSerializationVisibility(DesignerSerializationVisibility.Content),PersistenceMode(PersistenceMode.InnerDefaultProperty),Editor(typeof(ComboItemCollectionEditor),typeof(System.Drawing.Design.UITypeEditor)),MergableProperty(false)]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content), Editor(typeof(System.ComponentModel.Design.CollectionEditor), typeof(System.Drawing.Design.UITypeEditor)), PersistenceMode(PersistenceMode.InnerDefaultProperty), MergableProperty(false)]
public ComboItemCollection Items
{
get
{
return _items;
}
}
[DefaultValue("")]
public virtual string DataMember
{
get
{
object obj1 = this.ViewState["DataMember"];
if (obj1 != null)
{
return (string) obj1;
}
return string.Empty;
}
set
{
this.ViewState["DataMember"] = value;
}
}
[DefaultValue((string) null)]
public object DataSource
{
get
{
return this.dataSource;
}
set
{
if (((value != null) && !(value is IListSource)) && !(value is IEnumerable))
{
throw new ArgumentException("unvalid data source.", this.ID);
}
this.dataSource = value;
}
}
[DefaultValue("")]
public virtual string DataTextField
{
get
{
object obj1 = this.ViewState["DataTextField"];
if (obj1 != null)
{
return (string) obj1;
}
return string.Empty;
}
set
{
this.ViewState["DataTextField"] = value;
}
}
[DefaultValue("")]
public virtual string DataValueField
{
get
{
object obj1 = this.ViewState["DataValueField"];
if (obj1 != null)
{
return (string) obj1;
}
return string.Empty;
}
set
{
this.ViewState["DataValueField"] = value;
}
}
public void ClearSelection()
{
for(int i=0; i < this.Items.Count; i++)
{
this.Items[i].Selected = false;
}
}
/// <summary>
/// Clear all items and text.
/// </summary>
public void Clear()
{
this.Items.Clear();
this.Text = string.Empty;
}
public ComboItem FindByText(string text)
{
for(int i=0; i < this.Items.Count; i++)
{
if(string.Compare(text,this.Items[i].Text,true)==0)
return this.Items[i];
}
return null;
}
public ComboItem FindByValue(string value)
{
for(int i=0; i < this.Items.Count; i++)
{
if(string.Compare(value,this.Items[i].Value,true)==0)
return this.Items[i];
}
return null;
}
[Browsable(false)]
public int SelectedIndex
{
get
{
for(int i=0; i < this.Items.Count; i++)
{
if(this.Items[i].Selected)
return i;
}
return -1;
}
}
[Browsable(false)]
public ComboItem SelectedItem
{
get
{
int selectedIndex = this.SelectedIndex;
if(selectedIndex > -1)
return this.Items[selectedIndex];
else
return null;
}
}
public string SelectedValue
{
set
{
ComboItem item = this.FindByValue(value);
if(item!=null && this.Items.Count > 0)
{
this.ClearSelection();
item.Selected = true;
}
}
get
{
if(this.SelectedIndex > -1)
return this.SelectedItem.Value;
return string.Empty;
}
}
protected override void Render(HtmlTextWriter writer)
{
// Assembly assembly = typeof(ComboBox).Assembly;
// Version version = assembly.GetName().Version;
writer.Write("<?XML:NAMESPACE PREFIX=DEADBEEF />"+Environment.NewLine);
writer.Write("<?IMPORT NAMESPACE=DEADBEEF IMPLEMENTATION=\"Bestcomy/ComboBox.ashx\" />"+Environment.NewLine);
base.Render (writer);
}
protected override void RenderContents(HtmlTextWriter writer)
{
for(int i=0; i < this.Items.Count; i++)
{
ComboItem item = this.Items[i];
writer.WriteBeginTag("OPTION");
if(item.Selected)
writer.WriteAttribute("selected", "selected", false);
writer.WriteAttribute("value",item.Value,true);
writer.Write(">");
HttpUtility.HtmlEncode(item.Text,writer);
writer.WriteEndTag("OPTION");
writer.WriteLine();
}
}
protected override void AddParsedSubObject(object obj)
{
if(obj is ComboItem)
{
this.Items.Add((ComboItem)obj);
}
}
protected override void AddAttributesToRender(HtmlTextWriter writer)
{
writer.AddAttribute(HtmlTextWriterAttribute.Name, this.UniqueID);
writer.AddAttribute("text",this.Text,true);
writer.AddAttribute("Index",this.SelectedIndex.ToString());
base.AddAttributesToRender (writer);
}
protected override void OnDataBinding(EventArgs e)
{
base.OnDataBinding (e);
IEnumerable enumerable1 = DataSourceHelper.GetResolvedDataSource(this.DataSource, this.DataMember);
if (enumerable1 != null)
{
this.Items.Clear();
foreach (object obj1 in enumerable1)
{
ComboItem item = new ComboItem();
if(this.DataTextField != string.Empty && this.DataValueField != string.Empty)
{
item.Text = DataBinder.GetPropertyValue(obj1,this.DataTextField,null);
item.Value = DataBinder.GetPropertyValue(obj1,this.DataValueField,null);
}
else if(this.DataTextField != string.Empty)
{
item.Text = DataBinder.GetPropertyValue(obj1,this.DataTextField,null);
item.Value = DataBinder.GetPropertyValue(obj1,this.DataTextField,null);
}
else if(this.DataValueField != string.Empty)
{
item.Text = DataBinder.GetPropertyValue(obj1,this.DataValueField,null);
item.Value = DataBinder.GetPropertyValue(obj1,this.DataValueField,null);
}
else
item.Text = obj1.ToString();
this.Items.Add(item);
}
}
}
protected override void TrackViewState()
{
base.TrackViewState ();
((IStateManager)this.Items).TrackViewState();
}
protected override object SaveViewState()
{
object obj1 = base.SaveViewState();
object obj2 = ((IStateManager)this.Items).SaveViewState();
object obj3 = this.Text;
if(obj1==null && obj2==null && obj3==null)
return null;
return new Triplet(obj1,obj2,obj3);
}
protected override void LoadViewState(object savedState)
{
if(savedState!=null)
{
Triplet state = (Triplet)savedState;
base.LoadViewState(state.First);
((IStateManager)this.Items).LoadViewState(state.Second);
_text = (string)state.Third;
}
}
#region IPostBackDataHandler Members
public void RaisePostDataChangedEvent()
{
}
public bool LoadPostData(string postDataKey, System.Collections.Specialized.NameValueCollection postCollection)
{
string[] textArray1 = postCollection.GetValues(postDataKey);
if (textArray1 != null)
{
this.ClearSelection();
if(textArray1.Length > 1)
{
ComboItem item = this.FindByValue(textArray1[1]);
if(item != null)
{
item.Selected = true;
}
}
_text = textArray1[0];
}
return false;
}
#endregion
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -