📄 listcontrol.cs
字号:
using System;
using System.Collections;
namespace System.Web.UI.WebControls
{
/// <summary>
/// Summary description for ListControl.
/// </summary>
public class ListControl : WebControl
{
private static object EventSelectedIndexChanged;
private static char[] SPLIT_CHARS;
private int cachedSelectedIndex;
private object dataSource;
private ListItemCollection items;
static ListControl()
{
char[] local0;
ListControl.EventSelectedIndexChanged = new Object();
local0 = new Char[1];
local0[0] = ',';
ListControl.SPLIT_CHARS = local0;
}
public ListControl() : base(System.Web.UI.HtmlTextWriterTag.Select)
{
this.cachedSelectedIndex = -1;
}
//清除选择,将Items中的所有项的Selected置为false
public virtual void ClearSelection()
{
int local0;
local0 = 0;
while (local0 < this.Items.Count)
{
this.Items[local0].Selected = false;
local0++;
}
}
//ListControl的ViewState使用System.Web.UI.Triplet对象保存,
//First保存基类WebControl的ViewState
//Second保存Items的ViewState
//Third保存SelectedIndices
protected override void LoadViewState(object savedState) //ok
{
System.Web.UI.Triplet local0;
object local1;
if (savedState != null)
{
local0 = (System.Web.UI.Triplet) savedState;
//调用基类的LoadViewState
base.LoadViewState(local0.First);
//对Items进行LoadViewState
this.Items.LoadViewState(local0.Second);
//设置SelectedIndices
local1 = local0.Third;
if (local1 != null)
this.SelectInternal((ArrayList) local1);
}
}
//ListControl的ViewState使用System.Web.UI.Triplet对象保存,
//First保存基类WebControl的ViewState
//Second保存Items的ViewState
//Third保存SelectIndex
protected override object SaveViewState() //ok
{
object local0;
object local1;
object local2;
//基类的SaveViewState结果
local0 = base.SaveViewState();
//Items的SaveViewState结果
local1 = this.Items.SaveViewState();
//获取SelectedIndicesInternal的结果
local2 = null;
if (this.SaveSelectedIndicesViewState)
local2 = this.SelectedIndicesInternal;
//如果基类的SaveViewState结果不为null,
//或者Items的SaveViewState结果不为null,
//或者SelectedIndicesInternal不为null,
//则返回一个Triplet对象
if ((local2 != null)
|| (local1 != null)
|| (local0 != null)
)
{
return new System.Web.UI.Triplet(local0, local1, local2);
}
return null;
}
protected override void TrackViewState() //ok
{
base.TrackViewState();
this.Items.TrackViewState();
}
private bool SaveSelectedIndicesViewState //ok
{
get
{
Type local0;
if ((this.Events[ListControl.EventSelectedIndexChanged] != null)
|| this.Enabled
|| this.Visible
)
{
//line 0028
return true;
}
local0 = this.GetType();
if ((local0 == typeof(DropDownList)
|| local0 == typeof(ListBox)
|| local0 == typeof(CheckBoxList)
|| local0 == typeof(RadioButtonList))
)
{
return false;
}
return true;
}
}
internal void SelectInternal(ArrayList selectedIndices) //ok
{
this.ClearSelection();
for(int i=0; i< selectedIndices.Count; i++)
{
int local1;
local1 = (Int32) selectedIndices[i];
if (local1 >= 0 && local1 < this.Items.Count)
{
this.Items[local1].Selected = true;
}
}
}
public virtual ListItemCollection Items
{
get
{
if (this.items == null)
{
this.items = new ListItemCollection();
if (this.IsTrackingViewState)
{
this.items.TrackViewState();
}
}
return this.items;
}
}
public virtual bool AutoPostBack
{
get
{
object local0;
local0 = this.ViewState["AutoPostBack"];
if (local0 != null)
{
return (bool) local0;
}
return false;
}
set
{
this.ViewState["AutoPostBack"] = value;
}
}
public virtual string DataMember
{
get
{
object local0;
local0 = this.ViewState["DataMember"];
if (local0 != null)
return (String) local0;
return System.String.Empty;
}
set
{
this.ViewState["DataMember"] = value;
}
}
//DataSource必须实现了System.ComponentModel.IListSource接口
//或System.Collections.IEnumerable接口
public virtual object DataSource
{
get
{
return this.dataSource;
}
set
{
if((value == null)
|| (value as System.ComponentModel.IListSource == null)
|| (value as IEnumerable == null)
)
{
throw new ArgumentException(
HttpRuntime.FormatResourceString("Invalid_DataSource_Type", this.ID)
);
}
this.dataSource = value;
}
}
public virtual string DataTextField
{
get
{
object local0;
local0 = this.ViewState["DataTextField"];
if (local0 != null)
return (String) local0;
return System.String.Empty;
}
set
{
this.ViewState["DataTextField"] = value;
}
}
public virtual string DataTextFormatString
{
get
{
object local0;
local0 = this.ViewState["DataTextFormatString"];
if (local0 != null)
{
return (String) local0;
}
return System.String.Empty;
}
set
{
this.ViewState["DataTextFormatString"] = value;
}
}
public virtual string DataValueField
{
get
{
object local0;
local0 = this.ViewState["DataValueField"];
if (local0 != null)
{
return (String) local0;
}
return System.String.Empty;
}
set
{
this.ViewState["DataValueField"] = value;
}
}
public virtual ListItem SelectedItem
{
get
{
int local0;
local0 = this.SelectedIndex;
if (local0 >= 0)
{
return this.Items[local0];
}
return null;
}
}
/// <summary>
///
/// </summary>
public virtual int SelectedIndex
{
get
{
for(int i=0; i<this.Items.Count; i++)
{
if(this.Items[i].Selected)
{
return i;
}
}
return -1;
}
set
{
//如果Items数量为0,保存在cachedSelectedIndex中并返回
if (this.Items.Count == 0)
{
this.cachedSelectedIndex = value;
return;
}
//如果value小于-1,或者大于等于Items的数量
if (value < -1 || value >= this.Items.Count)
{
throw new ArgumentOutOfRangeException("value");
}
//清除选择
this.ClearSelection();
//设置Items[value]的Selected属性
if (value >= 0)
{
this.Items[value].Selected = true;
}
}
}
//获取Items中所有被选中的项的Index,
//如果没有任何项被选中,则返回null
protected internal virtual ArrayList SelectedIndicesInternal
{
get
{
ArrayList __arraylist;
__arraylist = null;
for(int i=0; i<this.Items.Count; i++)
{
if(this.Items[i].Selected)
{
if(__arraylist == null)
{
__arraylist = new ArrayList(3);
}
__arraylist.Add(i);
}
}
return __arraylist;
}
}
protected virtual void OnSelectedIndexChanged(EventArgs e)
{
EventHandler local0;
local0 = (EventHandler) this.Events[ListControl.EventSelectedIndexChanged];
if (local0 != null)
{
local0.Invoke(this, e);
}
}
[WebCategoryAttribute("Action")]
[WebSysDescriptionAttribute("ListControl_OnSelectedIndexChanged")]
public event EventHandler SelectedIndexChanged
{
add
{
this.Events.AddHandler(ListControl.EventSelectedIndexChanged, value);
}
remove
{
this.Events.RemoveHandler(ListControl.EventSelectedIndexChanged, value);
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -