Dalam proyek saat ini, ada bagian pencarian. Hal ini diperlukan untuk menampilkan bidang di Grid hasil pencarian untuk memungkinkan pengguna memilih.
Oleh karena itu, dua Kotak Daftar digunakan untuk mencantumkan semua bidang yang dapat ditampilkan dan bidang tampilan yang dipilih,
dan js digunakan di dalamnya latar depan untuk mengontrol item di antara dua Kotak Daftar
(Tidak mungkin, tes mm mengatakan bahwa acara latar belakang disegarkan dan terlihat tidak nyaman...)
Jadi saya membuat 2 tombol html
Peristiwanya adalah sebagai berikut: (Jangan khawatir tentang Hidden1 untuk saat ini)
Uji fungsi (lbFieldsSelect, nilai)
{
untuk (j = 0;j<lbFieldsSelect.length; j++)
{
if (lbFieldsSelect.options[j].value == value) mengembalikan nilai true;
}
kembali salah;
}
fungsi PilihField()
{
var lbFields = dokumen.getElementById("lbFields");
var lbFieldsSelect = dokumen.getElementById("lbFieldsSelect");
var Hidden1 = dokumen.getElementById("Hidden1");
untuk (i = 0;i<lbFields.length; i++)
{
if (lbFields.options[i].dipilih)
{
if (Uji(lbFieldsSelect,lbFields.options[i].value))
{
// Bidang telah dipilih
melanjutkan;
}
lbFieldsSelect.options.add(document.createElement("OPTION"));
lbFieldsSelect.options[lbFieldsSelect.length-1].text=lbFields.options[i].text;
lbFieldsSelect.options[lbFieldsSelect.length-1].value=lbFields.options[i].value;
Hidden1.value = Hidden1.value + "#" + lbFields.options[i].teks + "@" + lbFields.options[i].value;
}
}
}
fungsi UnSelectField()
{
var lbFields = dokumen.getElementById("lbFields");
var lbFieldsSelect = dokumen.getElementById("lbFieldsSelect");
var Hidden1 = dokumen.getElementById("Hidden1");
untuk (i = 0;i<lbFieldsSelect.length; i++)
{
jika (lbFieldsSelect.options[i].dipilih)
{
lbFieldsSelect.options.add(document.createElement("OPTION"));
lbFieldsSelect.options[lbFieldsSelect.length-1].text=lbFields.options[i].text;
lbFieldsSelect.options[lbFieldsSelect.length-1].value=lbFields.options[i].value;
Hidden1.value = Hidden1.value + "#" + lbFields.options[i].teks + "@" + lbFields.options[i].value;
}
}
}
Tanpa diduga, ketika diserahkan ke latar belakang, ListItem yang ditambahkan di meja depan telah hilang. Kalau dipikir-pikir, pasti asp.net tidak menambahkan ViewState setelah perubahan klien ListBox saat memposting kembali.
Faktanya, Anda tidak dapat menyalahkan ms, bahkan tabel tersebut tidak memiliki ViewState (menurut ms, tabel hanyalah sebuah wadah, dan kontrol dalam tabel perlu mempertahankan ViewState)
ListBox, sesuatu yang jarang diubah oleh klien, jelas tidak diperlukan lagi. Saya tidak punya pilihan selain membuat sesuatu yang dapat mempertahankan kondisi tampilan untuk meletakkan item di listBox. Jadi saya memiliki
kode yang sesuai di sisi server Hidden1 di atas:
kekosongan pribadi RestorelbFieldsSelect()
{
string[] sField =Hidden1.Value.Split('#');
//lstShowField.Items.Clear();
DataTable dtField = DataTable baru();
dtField.Columns.Add("sDisplayName","".GetType());
dtField.Columns.Add("sFieldName","".GetType());
untuk (int i = 0 ; i < sField.Panjangnya ; i ++)
{
if (sField[i] == null || sField[i] == "") lanjutkan;
Baris DataRow = dtField.NewRow();
baris[0] = sField[i].Split( '@')[0 ];
baris[1] = sField[i].Split( '@')[1 ];
dtField.Rows.Add(baris);
}
lbFieldsSelect.DataSource = dtField;
lbFieldsSelect.DataTextField = "sDisplayName";
lbFieldsSelect.DataValueField = "sFieldName";
lbFieldsSelect.DataBind();
}
Dalam hal ini, ListBox akan diperbarui sesuai dengan status tersembunyi setiap kali halaman dimuat.
Tujuan proyek kita telah tercapai (hanya diperlukan Item dari ListBox, tidak perlu mempertimbangkan pemilihan, dll.)
Jika Anda perlu memproses item yang dipilih, Anda mungkin memerlukan Hidden lainnya.
http://www.cnblogs.com/calmzeal/archive/2006/07/26/460068.html