30/05/2006

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

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?


Felipe Moura

Respostas

31/05/2006

It3r

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...


Responder Citar

02/06/2006

Felipe Moura

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 [b:5c17391bc7]OnRowCommand[/b:5c17391bc7] 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.
<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:

<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 [b:5c17391bc7]objectDataSource[/b:5c17391bc7]

</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
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 [b:5c17391bc7]GridViewCommandEventArgs e[/b:5c17391bc7] que permitirá a nós acessarmos os atributos dento do linkbutton
ex:
//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

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
[b:5c17391bc7]CommandName
ID
CommandArgument[/b:5c17391bc7]

Vale lembrar que o [b:5c17391bc7]CommandArgument[/b:5c17391bc7] 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
CommandArgument=´<¬# Eval(´id_noticia´) ¬>´

dentro do método do servidor basta um [b:5c17391bc7]e.CommandArgument[/b:5c17391bc7] 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


Responder Citar