Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

mpuntel

Valores repetem no SelectedValue do DropDownList

Recommended Posts

Olá,

novamente gostaria de ver se alguém saberia o que pode ser que eu esteja fazendo de errado..hehe

 

Tenho 4 DropDownList com a função de que o usuário deve informar o período que esteve envolvido. Ou seja, mês e ano de início e nês e ano de término.

 

No evento Page_Load carrego os valores de todos DDL

CODE

int ano;

int ano_at = Convert.ToInt16(DateTime.Now.Year);

for (ano = 1950; ano <= ano_at; ano++)

{

ListItem lst = new ListItem(Convert.ToString(ano), Convert.ToString(ano));

ddlEmpU_de_ano.Items.Add(lst);

ddlEmpU_ate_ano.Items.Add(lst);

}

 

int mes;

for (mes = 1; mes <= 12; mes++)

{

ListItem lst = new ListItem(Convert.ToString(mes), Convert.ToString(mes));

ddlEmpU_de_mes.Items.Add(lst);

ddlEmpU_ate_mes.Items.Add(lst);

}

Já no evento Page_LoadComplete, tenho uma rotina que busca os dados do usuário para que ele possa alterar. Até aí tudo bem pq todos os campos estão carregando.

CODE

//...comandos para preencher o datareader...

ddlEmpU_de_mes.SelectedValue = dr["empU_de_mes"].ToString();

ddlEmpU_de_ano.SelectedValue = dr["empU_de_ano"].ToString();

ddlEmpU_ate_mes.SelectedValue = dr["empU_ate_mes"].ToString();

ddlEmpU_ate_ano.SelectedValue = dr["empU_ate_ano"].ToString();

Só que os 4 DropDownList estão carregando incorretamente. Eles estão carregando o valor do último ano e último mês.

 

Ex.:

Se o usuário preencheu de: 01/1980 até: 05/1985.

 

Quando carregado os dados, no código acima, fica assim: de: 05/1985 até 05/1985.

 

Até carrega. Mas sempre o último valor. Não sei por que! A única coisa que eles tem em comum é no load preencher os valores, mas como fiz em eventos diferentes era pra ser outra coisa. Acho eu!

 

Se alguém puder me ajudar desde já agradeço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

quintelab pelo que entendi depois de umas lidas por aí é que existem os eventos Page_Load que são onde os componentes estão sendo "construídos" e atribuídos algumas propriedades.

 

Já no Page_LoadComplete é quando os componentes já foram totalmente "construídos". Tentei fazer certa vez com que os controles (textbox por exemplo) recebem um valor vindo do banco no evento Page_Load e não consegui. Daí vi que tinha que ser no Page_LoadComplete. Se é exatamente isso que falei acima não posso te afirmar.

 

Quanto ao meu problema é assim:

1 - O cara faz o cadastro.

2 - Caso precise alterar os dados, ele informar alguns dados (cpf, rg, ...). Faço um select no banco e trago os dados que ele preencheu no cadastro.

3 - Exibo todos os dados nos devidos campos. AQUI que todos os campos estão sendo carregados corretamente só os DropDownList dos períodos que estão "reinando". Pq se o usuário informou um período de, por exemplo, início 01/1980 e término 05/1985, quando vai ser exibido para ele poder atualizar os dados exibe em ambos os campos somente os dados do último, ou seja: início 05/1985 e término 05/1985.

 

Tentei colocar mais 4 controles e TODOS acontece isso. Assim..

No cadastro:

período 1 - de 01/1970 até 02/1975

período 2 - de 03/1980 até 04/1985

 

Na página de alteração do cadastro, que são buscados no banco, é exibido em TODOS os DropDownList assim:

período 1 - de 04/1985 até 04/1985

período 2 - de 04/1985 até 04/1985

 

Obs.: Os dados estão vindo corretamente dos banco.

 

Espero que tenha conseguido explicar.

 

Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

mpuntel é estranho, primeiro você poderia utilizar somente o Page_Load, lógico que primeiro deve popular seus DropDownList para depois falar qual estará selecionado. Mas a sua idéia esta certa, pois cada DropDown esta send ligado com um campo diferente, a única chance era os dados do banco estarem diferentes. Tente alimentar uma variável com os valores que estão sendo setados como SelectedValue para os Drop para ter certeza que os valores do banco estão corretos.

 

Abraços...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Estão corretos sim quintelab porque já dei response.write neles e foram impressos corretamente.

 

Também tentei assim:

ddlEmpU_de_mes.SelectedValue = "10";

ddlEmpU_de_ano.SelectedValue = "1950";

 

Daí TODOS os campos com mês mudam pra 10 e os com ano mudam pra 1950.

 

Sei lá...é como se eles tivessem se ligado uns aos outros no for que faço pra preencher os meses e anos.

 

No mais não tem nada. São nomes diferentes e os valores também.

 

Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fiz o teste aqui e deu certo, para cada drop seu você terá que instanciar a variável novamente, veja como ficou:

protected void Page_Load(object sender, EventArgs e) {
		int ano; 
		int ano_at = Convert.ToInt16(DateTime.Now.Year); 
		for (ano = 1950; ano <= ano_at; ano++) { 
			ListItem lst = new ListItem(Convert.ToString(ano), Convert.ToString(ano)); 
			ddlEmpU_de_ano.Items.Add(lst);

			lst = new ListItem(Convert.ToString(ano), Convert.ToString(ano));
			ddlEmpU_ate_ano.Items.Add(lst);
		} 
		int mes; 
		for (mes = 1; mes <= 12; mes++) { 
			ListItem lst = new ListItem(Convert.ToString(mes), Convert.ToString(mes)); 
			ddlEmpU_de_mes.Items.Add(lst);
		 
			lst = new ListItem(Convert.ToString(mes), Convert.ToString(mes));
			ddlEmpU_ate_mes.Items.Add(lst);
		}
		ddlEmpU_de_ano.SelectedValue = "1980";
		ddlEmpU_de_mes.SelectedValue = "10";
	}

Abraços...

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.