SID_SILVA 0 Denunciar post Postado Abril 1, 2009 Ola Amigos Eu estou em duvida sobre o RowDataBound e o RowCommand. Coloquei um BreakPoint para poder ver exatamente o que acontece. Ja citei outros problemas ligados a isso mas ainda estou com duvida. Pelo que percebi o RowDataBound e executado quando o GridView esta sendo carregado,ou quando a a insercao de uma nova linha,logo quando o Grid esta sendo montado ele e executado "N" vezes, dependendo da quantidade de linhas do gridView. O RowCommand e excutado quando um botao por exemplo dentro do grid e executado. Pergunta, alias ate que enfim veio a pergunta. Na rotina abaixo, tenho um LinkButtom dentro do Gridview e a propriedade commandName chama-se PegaID. Entao a execucao do sistema, nao deveria passar por aqui toda vez que eu clicasse no LinkButtom ? Porque nao e isso o que esta acontecendo. Protected Sub GrdDocumentos_RowCommand(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewCommandEventArgs) Handles GrdDocumentos.RowCommand Dim IDREL As Double If e.CommandName = "PegaID" Then IDREL = Convert.ToDouble(e.CommandArgument) End If End Sub Muito Obrigado Compartilhar este post Link para o post Compartilhar em outros sites
quintelab 91 Denunciar post Postado Abril 2, 2009 Desta forma acredito que seja melhor utilizar um SelectedButton e que também possui um evento pra isso. Abraços... Compartilhar este post Link para o post Compartilhar em outros sites
Oenning 0 Denunciar post Postado Abril 2, 2009 Deveria, como está seu aspx e seu aspx.cs? Eu fiz assim e funcionou: <asp:GridView AutoGenerateColumns="false" ID="GridView1" runat="server" onrowcommand="GridView1_RowCommand"> <Columns> <asp:BoundField DataField="Id" /> <asp:BoundField DataField="Nome" /> <asp:TemplateField> <ItemTemplate> <asp:LinkButton ID="link" Text="Clique Aqui" CommandName="PegaID" CommandArgument='<%# Eval("Id") %>' runat="server"></asp:LinkButton> </ItemTemplate> </asp:TemplateField> </Columns> </asp:GridView> Quando eu clicno no LinkButton, ele chama o evento GridView1_RowCommand. Compartilhar este post Link para o post Compartilhar em outros sites
SID_SILVA 0 Denunciar post Postado Abril 2, 2009 Bom Dia Amigos Bem parece que o meu problema esta resolvido. quintelab Eu ja utilizei o SelectedButton para outros fins, para esse que eu citei eu nao consegui utiliza-lo por isso tentei usar o LinkButton. Oenning O meu HTML esta igual ao seu, depois de tanto quebrar a cabeca com isso, recebi uma dica no forum da Microsoft que falava sobre o "CommandArgument" e o "CommandName". Meu erro no "RowCommand", foi nao ter percebido que eu coloquei o comando no GridView errado e por isso nao estava funcionando, pois eu nunca clico nesse segundo Grid que e o errado. Eu clico no linkbutton do primeiro Grid que tem o registro pai e dai ecoo no segundo Grid os dados do registro filho, a partir do campo ID e agora esta funcionando. Devo ter feito alguma besteira para variar, pois eu ja fiz isso antes usando o SelectedButton. Mas a minha ingenuidade teve um lado positivo, pois agora eu aprendi na marra a usar o RowCommand e o RowDataBound que eu nao havia usado antes, ao menos nao diretamente. Obrigado mais uma vez, um abraco e ate a proxima duvida. Compartilhar este post Link para o post Compartilhar em outros sites
Oenning 0 Denunciar post Postado Abril 2, 2009 Te digo uma coisa, RowDataBound é seu melhor amigo. Você faz chover com esse evento, quase tudo que você configura em Grids é nele. Valeu! Compartilhar este post Link para o post Compartilhar em outros sites
SID_SILVA 0 Denunciar post Postado Abril 6, 2009 Bom Dia Amigos Parece que eu me deixei enganar. Aparentemente eu havia resolvido o meu problema principal que era pegar o campo ID, porem nao sei o que aconteceu mas embora eu ate consiga pega-lo, nao esta ocorrendo exatamente como eu preciso. Como disse, tenho um gridView e criei um template, onde coloquei um LinkButton.Meu objetivo e clicar nesse LinkButton, pegar o ID, com esse ID fazer uma leitura na base de dados pegando as informacoes que me interessam e entao abrir uma janela modal com esse campos pesquisados. Acontece que a janela esta sendo aberta assim que eu clico no LinkButton, ou seja, antes de pegar o ID e fazer a leitura na base de dados, portanto todos os campos estao em branco. Usei a estrutura que ja havia mencionado, no HTML e no Code Behind : <ItemTemplate> <asp:LinkButton ID="LinkButton1" runat="server" CommandName= "PegaID" CommandArgument='<%#Eval("REL_ID")%>' OnClientClick="openModal('Documentos.aspx', 800, 600);"><%#Eval("REL_DOCUMENTO")%></asp:LinkButton> </ItemTemplate> Protected Sub GrdDocumentos_RowCommand(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewCommandEventArgs) Handles GrdDocumentos.RowCommand Dim conexao As SqlConnection Dim sql As String = "" If e.CommandName = "PegaID" Then Session("IDREL") = Convert.ToDouble(e.CommandArgument) SQL = Convert.ToDouble(e.CommandArgument) End If End Sub Somente quando eu fecho a janela que foi aberta e que a execucao do programa vem para ca : Protected Sub GrdDocumentos_RowCommand... e pega o ID, porem isso tem que ser feito antes. No GridView coloquei : <asp:GridView ID="GrdDocumentos" runat="server" OnRowDataBound ="GrdDocumentos_RowDataBound" OnRowCommand="GrdDocumentos_RowCommand" E agora, o que foi que eu fiz de errado. Obrigado e um Abraco Compartilhar este post Link para o post Compartilhar em outros sites
Oenning 0 Denunciar post Postado Abril 6, 2009 OnClientClick vai executar antes do evento RowCommand. Eu recomendo você passar o ID por GET e fazer essa consulta na outra página. Fica assim: OnClientClick="openModal('Documentos.aspx?id=' + <%#Eval("REL_ID")%>, 800, 600);"Obs.: Posso ter errado na sintaxe acima, mas o resultado é para ser: Documentos.aspx?Id=2, por exemplo. Ai todo o código de consulta você pode fazer no Page_Load. Compartilhar este post Link para o post Compartilhar em outros sites
SID_SILVA 0 Denunciar post Postado Abril 6, 2009 Obrigado mais uma vez Oenning Eu acho que esse ASP.NET ainda vai me deixar maluco, a cada dia surge uma necessidade nova que exige um comando novo. Aqui nesse exemplo corrigido que voce me deu : OnClientClick="openModal('Documentos.aspx?id=' + <%#Eval("REL_ID")%>, 800, 600);" 'Documentos.aspx?id (Esse "ID" e o que?.E uma variavel qualquer, cujo valor sera acessado na pagina que sera chamada?) (E um campo da base de dados?) Eu costumo chamar uma nova pagina, passando parametros atraves do Code Behind, aqui no HTML eu nunca fiz, dai a razao da minha duvida. E eu nao seu se ai seria o REL_ID, uma vez que o valor dele vem logo a seguir em Eval("REL_ID"). MUito obrigado Compartilhar este post Link para o post Compartilhar em outros sites
SID_SILVA 0 Denunciar post Postado Abril 6, 2009 Esqueci de dizer. Coloquei assim e nao funcionou. <asp:LinkButton ID="LinkButton1" runat="server" CommandName= "PegaID" CommandArgument='<%#Eval("REL_ID")%>' OnClientClick="openModal('Documentos.aspx?REL_ID=' + <%#Eval("REL_ID")%>, 800, 600);"><%#Eval("REL_DOCUMENTO")%></asp:LinkButton> Bo gridView, onde aparece o LinkButton esta aparecendo isso: OnClientClick="openModal('Documentos.aspx?REL_ID=' + 13, 800, 600);">4C Ou seja, esta aparecendo parte do codigo HTML e no final aparece o valor que realmente deveria aparecer : 4C Acho que o problemas esta nas Aspas ou Apostrofes.Vou verificar. Obrigado Compartilhar este post Link para o post Compartilhar em outros sites
Oenning 0 Denunciar post Postado Abril 7, 2009 Existe meio que uma convenção na Web que diz que toda vez que você vai abrir um formulário para Consulta, Edição, Adição, você deve chamar a página usando GET, e quando você vai alterar dados, você usa POST. Por padrão o asp.net usa POST para tudo. O que você está fazendo ali é passar os dados de uma página para outra usando GET, passando o identificar para outra página. Você pega o valor assim: Request.QueryString["id"]Esse ID pode ser qualquer valor, mas deve ter um significado para você, com ele você deve ser capaz de buscar dados e disponibilzar ao usuário, geralmente acaba sendo a Primary Key da sua tabela. Compartilhar este post Link para o post Compartilhar em outros sites
SID_SILVA 0 Denunciar post Postado Abril 7, 2009 Bom Dia Oenning Obrigado novamente por sua ajuda. Eu realmente fiquei em duvida para saber de onde voce havia tirado esse campo "ID", uma vez que o meu e "REL_ID".Imaginei que voce estivesse se referindo a ele de forma generica, pois podemos chama-lo simplesmente de campo ID. Normalmente eu passo apenas o campo ID de uma pagina para outra, ou ate mesmo para a mesma pagina.Entretanto ate agora eu fiz isso apenas atraves do GridView.Para recuperar o dado, eu ja uso o Request.QueryString["id"], sem problemas. Essa foi a primeira vez que eu precisei passar o "ID", atraves do HTML,pelo motivo que citei anteriormente. Eu tenho um gridView com um LinkButton, clicando nesse Link, eu abro uma janela modal, dai preciso pegar esse ID para recuperar os dados do registro. Como voce disse anteriormente o Evento Click ocorre antes do Row_Command, dai mesmo pegando o ID no evento Row_Command, uma vez que o OnClick, ja foi executado a nova janela e aberta em branco sem os dados, sem que eu tenha a possibilidade de ler a base de dados com o ID pego. Falei demais nao e mesmo? Resumindo, o meu problema esta nessa tal sintaxe abaixo que eu nao consigo acertar. <asp:LinkButton ID="LinkButton1" runat="server" CommandName= "PegaID" CommandArgument='<%#Eval("REL_ID")%>' OnClientClick="openModal('Documentos.aspx?REL_ID=' + <%#Eval("REL_ID")%>, 800, 600);"><%#Eval("REL_DOCUMENTO")%></asp:LinkButton> No Html coloquei isso que esta acima e no grid, ao inves de aparecer o conteudo do campo "REL_DOCUMENTO", aparece isso que esta abaixo: OnClientClick="openModal('Documentos.aspx?REL_ID=' + 13, 800, 600);">4C Ao que parece parte do comando esta aparecendo como parte do link, o que significar Aspas ou Apostrofos no lugar errado. E isso ate que parecia ser tao simples. Obrigado Compartilhar este post Link para o post Compartilhar em outros sites
Oenning 0 Denunciar post Postado Abril 7, 2009 Tenta assim: OnClientClick="openModal('Documentos.aspx?REL_ID=<%#Eval("REL_ID")%>, 800, 600');"Ah, já que você está usando ClientClick, você não precisa mais usar o CommandName e Argument.E você pode trocar para HyperLink ao invés de LinkButton. Compartilhar este post Link para o post Compartilhar em outros sites
SID_SILVA 0 Denunciar post Postado Abril 7, 2009 Obrigado novamente Oenning Eu ja estou usando o LinkButton : <asp:LinkButton ID="LinkButton1" . ........ Vou tirar esses 2 itens Bem, falta pouco para eu resolver esse problema que ao que tudo indica e de sintaxe: [/code] <asp:LinkButton ID="LinkButton1" runat="server" OnClientClick="openModal('Documentos.aspx?REL_ID='+12, 800, 600);" ><%# Eval("REL_DOCUMENTO") %></asp:LinkButton> [code] Nessa sequencia : OnClientClick="openModal('Documentos.aspx?REL_ID='+12 (O numero 12, eu coloquei e representa um dos ID´s da minha tabela) Funcionou perfeitamente, a janela pop Up foi aberta e nessa janela que se abriu eu recuperei o ID passado com o QueryString, logo os campos foram preenchidos com as informacoes devidas.E exatamente isso o que eu quero. O problema continua o mesmo, como colocar essa informacao "<%#Eval("REL_ID")%>" (que corresponde ao ID) no lugar do 12, que eu coloquei manualmente. Continuo tentando descobrir onde estou errando. Aquele exemplo que voce me deu, infelizmente tambem nao funcionou [/code] OnClientClick="openModal('Documentos.aspx?REL_ID=<%#Eval("REL_ID")%>, 800, 600');" [code] Obrigado e um Abraco Compartilhar este post Link para o post Compartilhar em outros sites
Oenning 0 Denunciar post Postado Abril 8, 2009 Achei uma solução no fórum de asp.net, veja se funciona: OnClientClick='<%# Eval("REL_ID", "openModal(\"Documentos.aspx?REL_ID={0}, 800, 600\");") %>' Achei aqui: http://forums.asp.net/p/980311/1251978.aspx Compartilhar este post Link para o post Compartilhar em outros sites
SID_SILVA 0 Denunciar post Postado Abril 8, 2009 Bom Dia Oenning Realmente a sua ajuda tem sido muito preciosa para resolver alguns dos meus problemas. Fiquei contente quando vi mais esse exemplo que voce me passou mas infelizmente tambem nao funcionou o que e uma pena. Continuo achando que e um problema de aspas ou apostrofes.Pois a sintaxe abaixo funciona perfeitamente. <asp:LinkButton ID="LinkButton1" runat="server" OnClientClick="openModal('Documentos.aspx?REL_ID=13', 800, 600);"> <%# Eval("REL_DOCUMENTO") %> </asp:LinkButton> O problema como eu disse e que ao inves de aparecer o numero 13 que e o ID, deve aparecer o proprio ID que esta em '<%#Eval("REL_ID")%>'. E agora? Mais uma vez muito obrigado Ola Novamente So para complementar aqui esta a funcao JavaScript que eu estou usando: function openModal(pUrl, pWidth, pHeight) { if (window.showModalDialog) { return window.showModalDialog(pUrl, window, "dialogWidth:" + pWidth + "px;dialogHeight:" + pHeight + "px"); } else { try { netscape.security.PrivilegeManager.enablePrivilege( "UniversalBrowserWrite"); window.open(pUrl, "wndModal", "width=" + pWidth + ",height=" + pHeight + ",resizable=no,modal=yes"); return true; } catch (e) { alert("Script não confiável, não é possível abrir janela modal."); return false; } } Um Abraco Compartilhar este post Link para o post Compartilhar em outros sites
Oenning 0 Denunciar post Postado Abril 9, 2009 Olha, você pode fazer no evento RowDataBound, estou sem VS aqui, então segue rascunho. if (e.Row.RowType == RowType.DataRow) { LinkButton link = e.Row.FindControl("LinkButton1"); int id = e.row.Cells[0].Text; link.OnClientClick = "openModal('Documentos.aspx?REL_ID=" + id + ", 800, 600');"; } Fazendo no Code-Behind fica mais flexivel trabalhar com essas concatenações Compartilhar este post Link para o post Compartilhar em outros sites
SID_SILVA 0 Denunciar post Postado Abril 9, 2009 Bom Dia Oenning Eu fiz uma modificacao aqui : Dim ID1 As Double = DataBinder.Eval(e.Row.DataItem, "REL_ID") Pois a sequencia que voce me enviou nao funcionou. Me parece que a estrutura esta correta, porem deve haver algum problema com as Aspas e Apostrofes (Meu ponto fraco). Portanto ainda ha algum erro de sintaxe. Vou analisar mais um pouco. Obrigado e um Abraco Compartilhar este post Link para o post Compartilhar em outros sites
Oenning 0 Denunciar post Postado Abril 9, 2009 Depois que executa esse código do RowDataBoud, veja qual o conteudo do link.OnClientClick. Uma correção, tente assim: link.OnClientClick = "openModal('Documentos.aspx?REL_ID=" + id + "', 800, 600);"; Ele esta atribuindo o ID corretamente? Compartilhar este post Link para o post Compartilhar em outros sites
SID_SILVA 0 Denunciar post Postado Abril 9, 2009 Ola novamente meu amigo. O ID esta correto.O erro continua na sintaxe da linha abaixo : link.OnClientClick = "openModal('Documentos.aspx?REL_ID=" + ID + "', 800, 600);" Protected Sub GrdDocumentos_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles GrdDocumentos.RowDataBound If (e.Row.RowType = DataControlRowType.DataRow) Then Dim link As LinkButton = e.Row.FindControl("LinkButton1") Dim ID As Double = DataBinder.Eval(e.Row.DataItem, "REL_ID") link.OnClientClick = "openModal('Documentos.aspx?REL_ID=" + ID + "', 800, 600);" End If END SUB De volta para a mesa de cirurgia. Obrigado Compartilhar este post Link para o post Compartilhar em outros sites
Oenning 0 Denunciar post Postado Abril 9, 2009 Vai no exibir código fonte da página e veja qual as marcações que o código está gerando, se o ID está sendo impresso corretamente. Estou achando que o problema não é mais ai... Compartilhar este post Link para o post Compartilhar em outros sites