Selama proses pengembangan halaman situs web ASP.NET 2.0, sering kali perlu mengatur nilai SelectedValue dari kontrol daftar seperti DropDownList ke nilai yang dibaca dari database atau tempat lain.
Cara termudah adalah dengan menentukannya secara langsung:
DropDownList1.SelectedValue = "Cina";
Namun terkadang jika tidak ada item "China" di DropDownList1, pengecualian akan terjadi pada penugasan:
Detail pengecualian: System.ArgumentOutOfRangeException: "DropDownList1" memiliki SelectedValue yang tidak valid karena tidak ada dalam daftar item.
Apa yang ingin Anda capai: Jika nilai yang ditentukan tidak ada dalam item daftar, jangan setel item yang dipilih dan jangan berikan pengecualian.
Lihat MSDN:
Properti SelectedValue juga dapat digunakan untuk memilih item dalam kontrol daftar dengan mengatur properti dengan nilai item tersebut. Jika item apa pun dalam kontrol daftar tidak berisi nilai yang ditentukan, System.ArgumentOutOfRangeException akan dilempar.
Namun yang aneh adalah penugasan seperti itu tidak akan salah dalam banyak kasus, tetapi kadang-kadang akan salah. Saya memeriksa implementasi SelectedValue melalui refleksi dan menemukan alasannya.
string virtual publik SelectedValue
{
mendapatkan
{
int angka1 = ini.Indeks Terpilih;
jika (angka1 >= 0)
{
kembalikan this.Items[num1].Value;
}
return string.Kosong;
}
mengatur
{
if (ini.Item.Jumlah!= 0)
{
if ((nilai == null) || (base.DesignMode && (nilai.Panjang == 0)))
{
ini.ClearSelection();
kembali;
}
ListItem item1 = ini.Items.FindByValue(nilai);
if ((((Halaman ini!= null) && ini.Halaman.IsPostBack) && ini._stateLoaded) && (item1 == null))
{
throw new ArgumentOutOfRangeException("value", SR.GetString("ListControl_SelectionOutOfRange", objek baru[] { this.ID, "SelectedValue" }));
}
jika (item1!= nol)
{
ini.ClearSelection();
item1.Terpilih = benar;
}
}
this.cachedSelectedValue = nilai;
}
}
Ternyata kesalahan penugasan hanya terjadi ketika halaman tersebut adalah IsPostBack.
Selain itu, pengecualian akan terjadi jika Anda menulis seperti ini:
DropDownList1.Items.FindByValue("China").Dipilih = benar;
Akhirnya menemukan cara untuk mencapai persyaratan di atas:
DropDownList1.SelectedIndex = DropDownList1.Items.IndexOf(DropDownList1.Items.FindByValue("China"));
Artinya, jika item yang ditentukan tidak ditemukan melalui FindByValue, item tersebut akan menjadi null, dan Items.IndexOf(null) akan mengembalikan -1
http://www.cnblogs.com/weizhuangzhi/archive/2006/12/13/591251.html