Suspenso Não Rendering Depois Databinding
-
05-07-2019 - |
Pergunta
Estou ligação a um menu suspenso. Ele funciona na carga inicial. Em cargas subseqüentes (postagens) não atualizar os itens no menu suspenso.
using (DataView dv = dtProductGroup.DefaultView)
{
dv.ApplyDefaultSort = false;
dv.Sort = "KVIGroupName ASC";
ddlGroup.ClearSelection();
ddlGroup.Items.Clear();
string strAll = Localization.GetResourceValue("_strddlStatusLBAll");
ddlGroup.DataValueField = "KVIGroupId";
ddlGroup.DataTextField = "KVIGroupName";
ddlGroup.DataSource = dv;
ddlGroup.DataBind();
ListItem item = new ListItem(strAll, "0");
ddlGroup.Items.Insert(0, item);
}
Eu já confirmou que as postagens os dados estão sendo obrigados a suspensa e itens são adicionados com sucesso. Mas quando a página é processada a lista suspensa não tem qualquer um dos novos valores.
Eu vejo duas possibilidades: O controle é não tornar os novos valores ou os valores estão sendo apuradas. Eu estou em uma perda de onde procurar para possíveis problemas.
Editar
Eu descobri o problema. O DROPDOWNLIST foi incorporado em um condicional UpdatePanel. Simplesmente chamando "UpdatePanel.Update ();" resolveu o problema.
Solução
Ao Postback o viewstate está sendo reaplicado + você disse que está tentando valores de carga novamente. Eu sugiro deixando carry viewstate todo o peso no postback. Apenas carregar os valores quando a página é primeiro hit adicionando if (! IsPostBack) como assim
using (DataView dv = dtProductGroup.DefaultView)
{
if (! IsPostBack) {
dv.ApplyDefaultSort = false;
dv.Sort = "KVIGroupName ASC";
ddlGroup.ClearSelection();
ddlGroup.Items.Clear();
string strAll = Localization.GetResourceValue("_strddlStatusLBAll");
ddlGroup.DataValueField = "KVIGroupId";
ddlGroup.DataTextField = "KVIGroupName";
ddlGroup.DataSource = dv;
ddlGroup.DataBind();
ListItem item = new ListItem(strAll, "0");
ddlGroup.Items.Insert(0, item);
}
}
Editar: Além disso, sua sintaxe garante o objeto DataView referenciado por dv é descartado quando as saídas de bloco de código. Minha segunda suposição é o que provoca um efeito colateral que causa o problema.
using (DataView dv = dtProductGroup.DefaultView)
{
Em vez deixar de fora o uso e escrever uma declaratoin regular como o seguinte (A DataView vai ser eliminados juntamente com tudo mais quando a página é feito tornando assim não há realmente nenhuma necessidade de fazê-lo sozinho).
DataView dv = dtProductGroup.DefaultView;
Veja a documentação MSDN sobre 'usando' e IDisposable para informação detalhada.