📄 grouplist.cs
字号:
using System;
using System.Collections;
using System.ComponentModel;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace Bestcomy.Web.UI.WebControls
{
/// <summary>
///
/// </summary>
[ToolboxData("<{0}:GroupList runat=server></{0}:GroupList>"),ParseChildren(true,"GroupItems"),PersistChildren(false),DefaultEvent("SelectedIndexChanged"),ValidationProperty("SelectedItem"),Designer(typeof(GroupListDesigner))]
public class GroupList : WebControl, INamingContainer, IPostBackDataHandler
{
public event EventHandler SelectedIndexChanged;
private GroupItemCollection _items = new GroupItemCollection();
private object dataSource;
public GroupList() : base(HtmlTextWriterTag.Select)
{
}
[DefaultValue(-1)]
public int SelectedIndex
{
get
{
int _selectedIndex = -1;
int num = 0;
for(int i=0; i<this.GroupItems.Count; i++)
{
int idx = this.GroupItems[i].Items.FindSelected();
if(idx > -1)
{
_selectedIndex = num + idx;
break;
}
num += this.GroupItems[i].Items.Count;
}
return _selectedIndex;
}
set
{
if ((value < -1) || (value >= this.GroupListItemCount))
{
throw new ArgumentOutOfRangeException("value");
}
ClearSelection();
int num = 0;
for(int i=0; i<this.GroupItems.Count; i++)
{
if(value < num + this.GroupItems[i].Items.Count)
{
this.GroupItems[i].Items[value-num].Selected = true;
break;
}
num += this.GroupItems[i].Items.Count;
}
}
}
public GroupListItem SelectedItem
{
get
{
for(int i=0; i<this.GroupItems.Count; i++)
{
int idx = this.GroupItems[i].Items.FindSelected();
if(idx > -1)
{
return this.GroupItems[i].Items[idx];
}
}
return null;
}
}
public void ClearSelection()
{
for(int i=0; i<this.GroupItems.Count; i++)
{
for(int j=0; j<this.GroupItems[i].Items.Count; j++)
this.GroupItems[i].Items[j].Selected = false;
}
}
public GroupListItem FindByText(string text)
{
for(int i=0; i<this.GroupItems.Count; i++)
{
int idx = this.GroupItems[i].Items.FindByText(text);
if(idx > -1)
return this.GroupItems[i].Items[idx];
}
return null;
}
public GroupListItem FindByValue(string value)
{
for(int i=0; i<this.GroupItems.Count; i++)
{
int idx = this.GroupItems[i].Items.FindByValue(value);
if(idx > -1)
return this.GroupItems[i].Items[idx];
}
return null;
}
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content), Editor(typeof(System.ComponentModel.Design.CollectionEditor), typeof(System.Drawing.Design.UITypeEditor)), PersistenceMode(PersistenceMode.InnerDefaultProperty), MergableProperty(false)]
public GroupItemCollection GroupItems
{
get
{
return _items;
}
}
public int GroupListItemCount
{
get
{
int num = 0;
for(int i=0; i<this.GroupItems.Count; i++)
num += this.GroupItems[i].Items.Count;
return num;
}
}
public virtual bool AutoPostBack
{
get
{
object obj1 = this.ViewState["AutoPostBack"];
if (obj1 != null)
{
return (bool) obj1;
}
return false;
}
set
{
this.ViewState["AutoPostBack"] = value;
}
}
[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 DataGroupField
{
get
{
object obj1 = this.ViewState["DataGroupField"];
if (obj1 != null)
{
return (string) obj1;
}
return string.Empty;
}
set
{
this.ViewState["DataGroupField"] = 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;
}
}
protected override void AddAttributesToRender(HtmlTextWriter writer)
{
if (this.Page != null)
{
this.Page.VerifyRenderingInServerForm(this);
}
writer.AddAttribute(HtmlTextWriterAttribute.Name, this.UniqueID);
if (this.AutoPostBack && (this.Page != null))
{
string text1 = this.Page.GetPostBackClientEvent(this, "");
string text2 = base.Attributes["onchange"];
if (text2 != null)
{
text1 = text2 + text1;
base.Attributes.Remove("onchange");
}
writer.AddAttribute(HtmlTextWriterAttribute.Onchange, text1);
writer.AddAttribute("language", "javascript");
}
base.AddAttributesToRender (writer);
}
protected override void RenderContents(HtmlTextWriter writer)
{
if(this.SelectedIndex == -1 && this.GroupListItemCount>0)
this.SelectedIndex = 0;
for(int i=0; i < this.GroupItems.Count; i++)
{
GroupItem gItem = this.GroupItems[i];
writer.WriteBeginTag("OPTGROUP");
writer.WriteAttribute("LABEL",gItem.Label,true);
writer.Write(">");
writer.WriteLine();
for(int j=0; j < gItem.Items.Count; j++)
{
GroupListItem item = gItem.Items[j];
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();
}
writer.WriteEndTag("OPTGROUP");
writer.WriteLine();
}
}
protected override void TrackViewState()
{
base.TrackViewState ();
((IStateManager)this.GroupItems).TrackViewState();
}
protected override object SaveViewState()
{
object obj1 = base.SaveViewState ();
object obj2 = ((IStateManager)this.GroupItems).SaveViewState();
if(obj1==null && obj2==null)
return null;
return new Pair(obj1, obj2);
}
protected override void LoadViewState(object savedState)
{
if(savedState!=null && savedState is Pair)
{
base.LoadViewState (((Pair)savedState).First);
((IStateManager)this.GroupItems).LoadViewState(((Pair)savedState).Second);
}
}
protected virtual void OnSelectedIndexChanged(EventArgs e)
{
if(SelectedIndexChanged != null)
SelectedIndexChanged(this,e);
}
protected override void OnDataBinding(EventArgs e)
{
base.OnDataBinding (e);
IEnumerable enumerable1 = DataSourceHelper.GetResolvedDataSource(this.DataSource, this.DataMember);
if (enumerable1 != null && this.DataGroupField!=string.Empty && this.DataTextField!=string.Empty && this.DataValueField!=string.Empty)
{
if(this.DataGroupField == string.Empty)
throw new ArgumentNullException("DataGroupField","DataGroupField required.");
if(this.DataTextField == string.Empty && this.DataValueField == string.Empty)
throw new ArgumentNullException("DataTextField","DataTextField required.");
if(this.DataValueField == string.Empty)
this.DataValueField = this.DataTextField;
else if(this.DataTextField == string.Empty)
this.DataTextField = this.DataValueField;
this.GroupItems.Clear();
foreach (object obj1 in enumerable1)
{
string groupText = DataBinder.GetPropertyValue(obj1,this.DataGroupField,null);
GroupItem gItem;
int idx = this.GroupItems.FindByText(groupText);
if(idx > -1)
gItem = this.GroupItems[idx];
else
{
gItem = new GroupItem(groupText);
GroupItems.Add(gItem);
}
GroupListItem item = new GroupListItem(DataBinder.GetPropertyValue(obj1,this.DataTextField,null), DataBinder.GetPropertyValue(obj1,this.DataValueField,null));
gItem.Items.Add(item);
}
}
}
#region IPostBackDataHandler members
public void RaisePostDataChangedEvent()
{
this.OnSelectedIndexChanged(EventArgs.Empty);
}
public bool LoadPostData(string postDataKey, System.Collections.Specialized.NameValueCollection postCollection)
{
string[] textArray1 = postCollection.GetValues(postDataKey);
if (textArray1 != null)
{
GroupListItem item = this.FindByValue(textArray1[0]);
if(item!=null)
{
if(this.SelectedItem == null)
this.SelectedIndex = 0;
string presentValue = this.SelectedItem.Value;
this.ClearSelection();
item.Selected = true;
return string.Compare(presentValue,item.Value,true)!=0 && this.AutoPostBack;
}
}
return false;
}
#endregion
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -