原創(chuàng)|其它|編輯:郝浩|2008-07-10 14:06:13.000|閱讀 1277 次
概述: 在ASP.NET 2.0 網(wǎng)站頁(yè)面的開發(fā)過(guò)程中,經(jīng)常需要把DropDownList等列表類控件的SelectedValue值設(shè)置為一個(gè)從數(shù)據(jù)庫(kù)或其他地方讀取出來(lái)的值。
# 界面/圖表報(bào)表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
在ASP.NET 2.0 網(wǎng)站頁(yè)面的開發(fā)過(guò)程中,經(jīng)常需要把DropDownList等列表類控件的SelectedValue值設(shè)置為一個(gè)從數(shù)據(jù)庫(kù)或其他地方讀取出來(lái)的值。
最簡(jiǎn)單的辦法就是直接進(jìn)行指定:
DropDownList1.SelectedValue = "中國(guó)";
但有的時(shí)候如果DropDownList1中沒(méi)有"中國(guó)"這一項(xiàng)的話,賦值就會(huì)出現(xiàn)異常:
異常詳細(xì)信息: System.ArgumentOutOfRangeException: “DropDownList1”有一個(gè)無(wú)效 SelectedValue,因?yàn)樗辉陧?xiàng)目列表中。
想要實(shí)現(xiàn)的目標(biāo):如果指定的值不在列表項(xiàng)中,則不設(shè)置選中項(xiàng),而且不要拋出異常。
查看MSDN:
SelectedValue 屬性還可以用于選擇列表控件中的某一項(xiàng),方法是用該項(xiàng)的值設(shè)置此屬性。如果列表控件中的任何項(xiàng)都不包含指定值,則會(huì)引發(fā) System.ArgumentOutOfRangeException。
但奇怪的是這樣賦值在大部分情況下都不會(huì)出錯(cuò),只是偶爾會(huì)出錯(cuò),通過(guò)反射查了一下SelectedValue的實(shí)現(xiàn),找到了原因。
public virtual string SelectedValue
{
get
{
int num1 = this.SelectedIndex;
if (num1 >= 0)
{
return this.Items[num1].Value;
}
return string.Empty;
}
set
{
if (this.Items.Count != 0)
{
if ((value == null) || (base.DesignMode && (value.Length == 0)))
{
this.ClearSelection();
return;
}
ListItem item1 = this.Items.FindByValue(value);
if ((((this.Page != null) && this.Page.IsPostBack) && this._stateLoaded) && (item1 == null))
{
throw new ArgumentOutOfRangeException("value", SR.GetString("ListControl_SelectionOutOfRange", new object[] { this.ID, "SelectedValue" }));
}
if (item1 != null)
{
this.ClearSelection();
item1.Selected = true;
}
}
this.cachedSelectedValue = value;
}
}
原來(lái)只有在頁(yè)面是IsPostBack的情況下,賦值才會(huì)出錯(cuò)。
另外這樣寫也會(huì)出現(xiàn)異常:
DropDownList1.Items.FindByValue("中國(guó)").Selected = true;
最后找到了一種方法可以實(shí)現(xiàn)上面的要求:
DropDownList1.SelectedIndex = DropDownList1.Items.IndexOf(DropDownList1.Items.FindByValue("中國(guó)"));
就是如果通過(guò)FindByValue沒(méi)有找到指定項(xiàng)則為null,而Items.IndexOf(null)會(huì)返回-1
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請(qǐng)務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請(qǐng)郵件反饋至chenjj@fc6vip.cn
文章轉(zhuǎn)載自:網(wǎng)絡(luò)轉(zhuǎn)載