Array
(
)

executar uma função através de um gridwiew

Felipe Moura
   - 30 mai 2006

Existe como eu fazer o seguinte, tenho um gridwiew com um campo select ou button quando eu clicar neste botão da gridwiew ser executado uma função no código que recebe o id correspondete a linha do registro?

ex: cliquei em uma linha chamei uma função e recebi como paramentro o id daquela linha para ir ao banco de dados.

existe como?

It3r
   - 31 mai 2006

sim claro...

verifique os eventos, como eu não sei a linguagem q está utilizando... seria algo como ´selected´ do gridview...

onde vc poderá recuperar assim...

e.cells(0)....

lembrando de verificar se é cabeçalho ou não, qualquer coisa replay neste post...

Felipe Moura
   - 02 jun 2006

Não entendi muito bem o que tu quis dizer mas uma amigo me deu as barbadas e eu vou repassar para vocês com minha palavras

existerm várias formas de executar metódos de servidor e métodos java script atravez de uma gridwiew

vamos lá:

na gridwiew existem diversos eventos um deles é o OnRowCommand esse atributo da nome ao método que vai interseptar no postback da página o click em buttons ou linksbuttons (por exemplo), quando forem clicados.

Citação:
<asp:GridView
...
OnRowCommand = ´GridView1_RowCommand´
...
>

GridView1_RowCommand = é o nome do método a ser chamdo quando as linhas forem clicadas
dentro da gridwiw temos o campo template com o linkbutton:

Citação:
<Columns>
<asp:TemplateField>
<ItemTemplate>
<asp:LinkButton ID=´editar´
CommandArgument=´<¬# Eval(´id_noticia´) ¬>´
CommandName=´editar´ runat=´server´ CausesValidation=´false´>
Editar Notícia
</asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField>
<ItemTemplate>
<asp:LinkButton ID=´deletar´
CommandArgument=´<¬ Eval(´id_noticia´) ¬>´
CommandName=´deletar´ runat=´server´ CausesValidation=´false´>
Deletar Notícia
</asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>
</Columns>


neste caso em espesífico temos duas colunas sem falar as que vem do banco atravez do objectDataSource

Citação:
</asp:GridView>


Sendo assim então devemos escrever o método para pegar os valores
OBS: TODOS OS CAMPOS TEMPLATES VAÕ SER INTERSEPTATODOS PELOS MESMOS MÉTODOS

Citação:

protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
{

//Response.Write(e.CommandArgument.ToString());
//Response.Write(e.CommandName.ToString());

if (e.CommandName.ToString() == ´editar´)
{
//manda para o método que edita
this.editar(e.CommandArgument.ToString());
//depois de editar reescreve a grid
GridView1.DataBind();
}
else
{
//manda para a classe para deletar
noticias.delete_noticias(e.CommandArgument.ToString());
//depois de deletar reescreve a grid
GridView1.DataBind();

}

}


Percebam que o nome da função é o mesmo que o do atributo OnRowCommand.

O legal de observar é o parâmetro GridViewCommandEventArgs e que permitirá a nós acessarmos os atributos dento do linkbutton
ex:

Citação:
//Response.Write(e.CommandArgument.ToString());
//Response.Write(e.CommandName.ToString());


Como esse eventro intercepta todas as linhas e colunas clicadas na gridwiew então se faz necessário o teste para identificar o que deve ser feito

Citação:
if (e.CommandName.ToString() == ´editar´) {
//rodar a rotina de ediçaõ
} else if (e.CommandName.ToString() == ´deletar´) {
//rodar a rotina de deleção
}


É por isso que colocarmos no linkbuttons dentro dos campos templates valores diferentes para os atributos
CommandName
ID
CommandArgument

Vale lembrar que o CommandArgument serve para colocarmos os valores que desejamos passar para as funções no meu caso (e no de muitas pessoas) é o id da tupla que eu desejo editar na tabela
Citação:
CommandArgument=´<¬# Eval(´id_noticia´) ¬>´

dentro do método do servidor basta um e.CommandArgument para acessar o valor (id)

Caso alguém tiver a necessidade de passar diversas dados no CommandArgument recomento suar serialização, separar por , | @ $ * & ou sei lá o que

espero que ajude alguém isso que eu escrevi
abraços