En el proyecto actual, hay una parte de búsqueda. Es necesario mostrar campos en la cuadrícula de resultados de búsqueda para permitir a los usuarios elegir.
Por lo tanto, se usan dos cuadros de lista para enumerar todos los campos visualizables y los campos de visualización seleccionados respectivamente,
y se usa js en. el primer plano para controlar los elementos entre los dos cuadros de lista Agregar, eliminar y mover.
(De ninguna manera, la prueba mm dijo que el evento en segundo plano se actualizó y parece incómodo...)
Así que hice 2 botones html
Los eventos son los siguientes: (No te preocupes por Hidden1 por ahora)
función Prueba(lbFieldsSelect,valor)
{
para (j = 0;j<lbFieldsSelect.length; j++)
{
si (lbFieldsSelect.options[j].value == valor) devuelve verdadero;
}
devolver falso;
}
función SeleccionarCampo()
{
var lbFields = document.getElementById("lbFields");
var lbFieldsSelect = document.getElementById("lbFieldsSelect");
var Oculto1 = document.getElementById("Oculto1");
para (i = 0;i<lbFields.length; i++)
{
si (lbFields.options[i].seleccionado)
{
if (Prueba(lbFieldsSelect,lbFields.options[i].valor))
{
//El campo ha sido seleccionado
continuar;
}
lbFieldsSelect.options.add(document.createElement("OPCIÓN"));
lbFieldsSelect.options[lbFieldsSelect.length-1].text=lbFields.options[i].text;
lbFieldsSelect.options[lbFieldsSelect.length-1].value=lbFields.options[i].value;
Valor1.oculto = Valor.1.oculto + "#" + lbFields.options[i].text + "@" + lbFields.options[i].value;
}
}
}
función UnSelectField()
{
var lbFields = document.getElementById("lbFields");
var lbFieldsSelect = document.getElementById("lbFieldsSelect");
var Oculto1 = document.getElementById("Oculto1");
para (i = 0;i<lbFieldsSelect.length; i++)
{
si (lbFieldsSelect.options[i].seleccionado)
{
lbFieldsSelect.options.add(document.createElement("OPCIÓN"));
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].text + "@" + lbFields.options[i].value;
}
}
}
Inesperadamente, cuando se envió en segundo plano, el ListItem agregado en la recepción desapareció. Pensándolo bien, debe ser que asp.net no agregó ViewState después del cambio del cliente ListBox al publicar de nuevo.
De hecho, no se puede culpar a MS, incluso la tabla no tiene ViewState (según MS, la tabla es solo un contenedor y es necesario que los controles de la tabla mantengan ViewState)
ListBox, algo que el cliente rara vez cambia, obviamente ya no es necesario. No tengo más remedio que crear algo que pueda mantener el estado de visualización para colocar los elementos en el listBox. Entonces tengo
el código correspondiente en el lado del servidor Hidden1
.arriba:
vacío privado RestorelbFieldsSelect()
{
cadena[] sField =Hidden1.Value.Split('#');
//lstShowField.Items.Clear();
DataTable dtField = nueva DataTable();
dtField.Columns.Add("sDisplayName","".GetType());
dtField.Columns.Add("sFieldName","".GetType());
para (int i = 0; i < sField.Length; i ++)
{
if (sField[i] == null || sField[i] == "") continuar;
Fila DataRow = dtField.NewRow();
fila[0] = sCampo[i].Split( '@')[0 ];
fila[1] = sCampo[i].Dividir( '@')[1 ];
dtField.Rows.Add(fila);
}
lbFieldsSelect.DataSource = dtField;
lbFieldsSelect.DataTextField = "sDisplayName";
lbFieldsSelect.DataValueField = "sFieldName";
lbFieldsSelect.DataBind();
}
En este caso, el ListBox se actualizará según el estado oculto cada vez que se cargue la página.
Se ha logrado el objetivo de nuestro proyecto (solo se necesita el elemento del ListBox, no es necesario considerar la selección, etc.)
Si necesita procesar elementos seleccionados, es posible que necesite otro Oculto.
http://www.cnblogs.com/calmzeal/archive/2006/07/26/460068.html