No projeto atual, há uma parte de pesquisa. É necessário exibir campos na grade de resultados da pesquisa para permitir que os usuários escolham.
Portanto, duas ListBoxes são usadas para listar todos os campos exibíveis e campos de exibição selecionados, respectivamente,
e js é usado em. em primeiro plano para controlar os itens entre as duas caixas de listagem Adicionar, excluir e mover.
(De jeito nenhum, o teste mm disse que o evento de fundo foi atualizado e parece desconfortável...)
Então fiz 2 botões html
Os eventos são os seguintes: (Não se preocupe com Hidden1 por enquanto)
teste de função (lbFieldsSelect, valor)
{
para (j = 0;j
if (lbFieldsSelect.options[j].value == valor) retornar verdadeiro;
}
retornar falso;
}
função SelecionarCampo()
{
var lbFields = document.getElementById("lbFields");
var lbFieldsSelect = document.getElementById("lbFieldsSelect");
var Oculto1 = document.getElementById("Oculto1");
para (i = 0;i
if (lbFields.options[i].selected)
{
if (Teste(lbFieldsSelect,lbFields.options[i].value))
{
//O campo foi selecionado
continuar;
}
lbFieldsSelect.options.add(document.createElement("OPÇÃO"));
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;
}
}
}
função UnSelectField()
{
var lbFields = document.getElementById("lbFields");
var lbFieldsSelect = document.getElementById("lbFieldsSelect");
var Oculto1 = document.getElementById("Oculto1");
para (i = 0;i
if (lbFieldsSelect.options[i].selected)
{
lbFieldsSelect.options.add(document.createElement("OPÇÃO"));
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, quando enviado para segundo plano, o ListItem adicionado na recepção desapareceu. Pensando bem, deve ser que o asp.net não adicionou o ViewState após a mudança do cliente ListBox ao postar de volta.
Na verdade, você não pode culpar o ms, mesmo a tabela não tem ViewState (de acordo com o ms, a tabela é apenas um contêiner, e é necessário que os controles da tabela mantenham o ViewState)
ListBox, algo que raramente é alterado pelo cliente, obviamente não é mais necessário. Não tenho escolha a não ser fazer algo que possa manter o viewstate para colocar os itens no listBox. Então, tenho
o código correspondente no lado do servidor Hidden1
.acima:
privado vazio RestorelbFieldsSelect()
{
string[] sField =Hidden1.Value.Split('#');
//lstShowField.Items.Clear();
DataTable dtField = new DataTable();
dtField.Columns.Add("sDisplayName","".GetType());
dtField.Columns.Add("sFieldName","".GetType());
for (int i = 0; i
if (sField[i] == null || sField[i] == "") continuar;
Linha DataRow = dtField.NewRow();
linha[0] = sField[i].Split( '@')[0 ];
linha[1] = sField[i].Split( '@')[1 ];
dtField.Rows.Add(linha);
}
lbFieldsSelect.DataSource = dtField;
lbFieldsSelect.DataTextField = "sDisplayName";
lbFieldsSelect.DataValueField = "sFieldName";
lbFieldsSelect.DataBind();
}
Neste caso, o ListBox será atualizado de acordo com o status oculto toda vez que a página for carregada.
O objetivo do nosso projeto foi alcançado (é necessário apenas o Item do ListBox, não há necessidade de considerar seleção, etc.)
Se precisar processar itens selecionados, você pode precisar de outro Oculto.
http://www.cnblogs.com/calmzeal/archive/2006/07/26/460068.html