Während des Entwicklungsprozesses von ASP.NET 2.0-Websiteseiten ist es häufig erforderlich, den SelectedValue-Wert von Listensteuerelementen wie DropDownList auf einen aus der Datenbank oder anderen Stellen gelesenen Wert festzulegen.
Am einfachsten ist es, es direkt anzugeben:
DropDownList1.SelectedValue = "China";
Aber manchmal, wenn in DropDownList1 kein „China“-Element vorhanden ist, tritt eine Ausnahme in der Zuweisung auf:
Ausnahmedetails: System.ArgumentOutOfRangeException: „DropDownList1“ hat einen ungültigen SelectedValue, da es nicht in der Liste der Elemente enthalten ist.
Was Sie erreichen möchten: Wenn der angegebene Wert nicht im Listenelement enthalten ist, legen Sie das ausgewählte Element nicht fest und lösen Sie keine Ausnahme aus.
Schauen Sie sich MSDN an:
Die SelectedValue-Eigenschaft kann auch verwendet werden, um ein Element in einem Listensteuerelement auszuwählen, indem die Eigenschaft mit dem Wert des Elements festgelegt wird. Wenn ein Element im Listensteuerelement den angegebenen Wert nicht enthält, wird eine System.ArgumentOutOfRangeException ausgelöst.
Aber das Seltsame ist, dass eine solche Zuweisung in den meisten Fällen nicht schief geht, aber gelegentlich schief geht. Ich habe die Implementierung von SelectedValue durch Nachdenken überprüft und den Grund gefunden.
öffentliche virtuelle Zeichenfolge SelectedValue
{
erhalten
{
int num1 = this.SelectedIndex;
if (num1 >= 0)
{
return this.Items[num1].Value;
}
return string.Empty;
}
Satz
{
if (this.Items.Count != 0)
{
if ((value == null) || (base.DesignMode && (value.Length == 0)))
{
this.ClearSelection();
zurückkehren;
}
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;
}
}
Es stellt sich heraus, dass Zuweisungsfehler nur auftreten, wenn die Seite IsPostBack ist.
Darüber hinaus tritt eine Ausnahme auf, wenn Sie so schreiben:
DropDownList1.Items.FindByValue("China").Selected = true;
Endlich einen Weg gefunden, die oben genannten Anforderungen zu erfüllen:
DropDownList1.SelectedIndex = DropDownList1.Items.IndexOf(DropDownList1.Items.FindByValue("China"));
Das heißt, wenn das angegebene Element nicht über FindByValue gefunden wird, ist es null und Items.IndexOf(null) gibt -1 zurück
http://www.cnblogs.com/weizhuangzhi/archive/2006/12/13/591251.html