Array
(
)

DropDownList - o datavaluefield é sempre o mesmo

Pjava
   - 17 jan 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();
}
}

Robson Robsonalves.net
   - 17 jan 2013


Citação:
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:

#Código

 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:

#Código
ddl.DataSource = Estados


e defina o Text e Value Field;
#Código
ddl.DataTextField = "Sigla";
ddl.DataValueField = "EstadoId";


0
|
0

Robson Robsonalves.net
   - 17 jan 2013

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

0
|
0

Pjava
   - 17 jan 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.

0
|
0

Pjava
   - 17 jan 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.

0
|
0

José
   - 25 jul 2013

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

0
|
0