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.

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top