DropDownList - o datavaluefield é sempre o mesmo

.NET

17/01/2013

Tenho uma DropDownList com as UF. Preciso pegar o DataValueField, à medida que eu escolho a UF. Acontece que só vem o valor do último registro. Tipo, se eu escolho SP(DataValueField = 26), mas o valor que é atribuído é o 27(TO), último registro. Se escolho AC(DataValue =1), continua vindo o 27. Fui dar um autopostback no Page_Load e além de duplicar a quantidade de registro no DropDown, ele continua com o mesmo problema. O que pode ser isso?

Essa é a rotina que fiz para preencher o DDL.
public void PreencheComboUf(DropDownList ddl)
{
MedicalServiceEntities msuf = new MedicalServiceEntities();
ObjectQuery<TB_ESTADO> estados = msuf.TB_ESTADO;

var Estados = from esta in estados
select new
{
esta.Sigla,
esta.EstadoId
};

foreach (var nm in Estados)
{
ddl.Items.Add(nm.Sigla);
ddl.DataValueField = nm.EstadoId.ToString();
}
}
Pjava

Pjava

Curtidas 0

Respostas

Robson Alves

Robson Alves

17/01/2013

Tenho uma DropDownList com as UF. Preciso pegar o DataValueField, à medida que eu escolho a UF. Acontece que só vem o valor do último registro. Tipo, se eu escolho SP(DataValueField = 26), mas o valor que é atribuído é o 27(TO), último registro. Se escolho AC(DataValue =1), continua vindo o 27. Fui dar um autopostback no Page_Load e além de duplicar a quantidade de registro no DropDown, ele continua com o mesmo problema. O que pode ser isso?

Essa é a rotina que fiz para preencher o DDL.
public void PreencheComboUf(DropDownList ddl)
{
MedicalServiceEntities msuf = new MedicalServiceEntities();
ObjectQuery<TB_ESTADO> estados = msuf.TB_ESTADO;

var Estados = from esta in estados
select new
{
esta.Sigla,
esta.EstadoId
};

foreach (var nm in Estados)
{
ddl.Items.Add(nm.Sigla);
ddl.DataValueField = nm.EstadoId.ToString();
}
}


Meu caro... simplifique isso:

 var Estados = from esta in estados
                          select new
                          {
                              esta.Sigla,
                              esta.EstadoId
                          };



O retorno do linq é uma list de Estados...
Atribua a variavel Estados no dropdown assim:

ddl.DataSource = Estados


e defina o Text e Value Field;
ddl.DataTextField = "Sigla";
ddl.DataValueField = "EstadoId";


GOSTEI 0
Robson Alves

Robson Alves

17/01/2013

o segundo foreach não existe mais! não é necessário ele.
GOSTEI 0
Pjava

Pjava

17/01/2013

Acho que eu não me fiz entender. Atribuir um DataValueField eu consigo. É na de eu pegar esse valor que não estou conseguindo, assim:

A combo já está preenchida. Aí eu seleciono SP(value == 26), acontece que o value que está vindo é 0 27 e não o 26. É somente na hora de eu selecionar a UF e pegar o value(ID) dele. Quanto a atribuir isso não é problemas.
GOSTEI 0
Pjava

Pjava

17/01/2013

Consegui, criando uma nova instância assim:
foreach (var nm in Estados)
{
ddl.Items.Add(new ListItem(nm.Sigla, nm.EstadoId.ToString()));
ddl.DataBind();
}
Post resolvido, podem fechar.
GOSTEI 0
José

José

17/01/2013

Obrigado por compartilhar a solução com a gente. Tópico concluído.
GOSTEI 0
POSTAR