Ir para conteúdo

Arquivado

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

Cega86

[Resolvido] capturar valor de um repeater

Recommended Posts

Tenho um repeater que traz dados do banco, para cada registro vindo do banco ele gera 2 textBox e 1 Button no seu itemTemplade.A intenção é o seguinte : O usuário clicando no botão eu faço um update no banco atualizando oq esta digitado na textbox correspondente daquele item templade.

Como eu faço para pegar o registro q o usuario clicar? já q o repeater pode gerar 2,3,4......... item templade.Como se fosse um grid view e eu quizesse pegar a linha q o usuario esta querendo editar

com grid view eu utilizo o evento "GridViewUpdateEventArgs e":

TextBox valor1 = (TextBox)GridViewProduto.Rows[e.RowIndex].Cells[1].FindControl("TextBoxNome");
		string nome_produto = valor1.Text;

 

Mas com o repeater não sei qual evento usar para pegar o index do item templade(como se fosse o e.RowIndex)

 

estou fazendo assim:

TextBox teste = (TextBox)Repeater1.Items[0].FindControl("TextBox2");
		string t = teste.Text;

ele me retorna a posição 0 to repeater ,mas o q devo colocar no lugar do 0 para q ele me de o index q o usuario escolher?

Compartilhar este post


Link para o post
Compartilhar em outros sites

E se voce criar uma coluna a mais, ocultando-a e gerando nela valores de identificação(1,2,3,4...) quando fosse pegar, você saberia qual linha esta pegando.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vlw galera, eu estou usando esse código , que usei como base de um tópico postado pelo quintelab em outro site,mas não é o ideal, pois ele "varre" todo o repeater e dependendo da quantidade de registros pode ocasionar lentidão no sistema, mas por enquanto ta quebrando um galho.

protected void Button_Atualizar_OnClick(object sender, EventArgs e)
	{
		int codigo_estudo = (int)Session["codigo_estudo"];
		int cod_item = 0;
		for (int i = 0; i < Repeater1.Items.Count; i++)
		{
			
			TextBox txt = (TextBox)Repeater1.Items[i].FindControl("TextBox2");
			string item = txt.Text;

			TextBox txt1 = (TextBox)Repeater1.Items[i].FindControl("TextBox3");
			string descricao = txt1.Text;
			cod_item += 1;
			daoe.atualiza_item(item,descricao,cod_item,codigo_estudo);
		   
		}
		//ClientScript.RegisterStartupScript(GetType(), "menssagem", Util.ScriptAlerta("Atualizado com sucesso!"));
		
	}

Rafael Não sei se entendi direito a sua idéia, mas pelo que entendi mesmo criando mais uma coluna eu precisarei saber o index do registro ou então terei que varrer tudo como estou fazendo.

 

Daniel acha esse código aí cara ......rsrsrsrs se você achar esse código vai ser de grande ajuda vlw.

 

se alguem tiver mais sugestões posta ae.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ae pessoal consegui fazer de um jeito que não varre o repeater e vai direto no cara que o usuario selecionar.

 

protected void Button_Atualizar_OnClick(object sender, EventArgs e)
	{	   
		Control botao = (Control)sender;
		RepeaterItem item = (RepeaterItem)botao.Parent;
				
		int codigo_estudo = (int)Session["codigo_estudo"];

		TextBox txt = (TextBox)item.FindControl("TextBox2");
		string titulo = txt.Text;

		TextBox txt1 = (TextBox)item.FindControl("TextBox3");
		string descricao = txt1.Text;

		Label lbl1 = (Label)item.FindControl("Label33");
		string cod_item = lbl1.Text; 

		monta_Popup(titulo, descricao, cod_item);
}

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.