caezar 0 Denunciar post Postado Janeiro 27, 2010 Amigos estou criando uma aplicação de um bolão aspx com VB, nela tenho um grid que apresenta os valores de 2 tabelas com este código sql conseguido com a ajuda do pessoal aqui do forum: SELECT Tab_Jogos.Data_Hora, Tab_Jogos.[Local], Tab_Jogos.Mandante, tblAposta.GolsM, tblAposta.GolsV, Tab_Jogos.Visitante, tblAposta.codUser FROM (tblAposta RIGHT OUTER JOIN Tab_Jogos ON tblAposta.codJogo = Tab_Jogos.codJogo) WHERE (tblAposta.codUser IS NULL) OR (tblAposta.codUser = ?) O CodUser eu retomo de uma session que criei em uma pagina de login. As tabelas do meu BD são essas: tbl_Jogo: CodJogo, Local, Data, Mandante, Visitante tbl_Usuario: CodUser, Nome, Apelido, Senha, Email tbl_Aposta:(CodJogo, CodUser)ChaveComposta, Gols_Mandante, Gols_Visitante Criei 2 colunas no grid do tipo Template e adicionei textBox neles trazendo valores dos campos tblAposta.GolsM e tblAposta.GolsV. Nestes textBox adiciono ou altero os valores, sem precisar selecionar a linha, criei tambem uma outra coluna template com e adicionei um button com o titulo "Gravar" e com o commandName = Update, Isso fara com que eu consiga gravar a linha sem selecionar. O Usuário escreve o valor nos textBox e aperta esse botão gravar. A duvida que tenho é se essa é melhor forma de criar uma tabela de um bolão como os da ESPN ou SporTv. Caso seja como eu faria no mesmo Data Source do Select acima o Update e Insert para jogar o valores dos gols que o usuário preencheu na tbl_Aposta. Obrigado mais uma vez... Abs Compartilhar este post Link para o post Compartilhar em outros sites
quintelab 91 Denunciar post Postado Janeiro 27, 2010 Você esta usando componente DataSource? Daqueles que são criados no html? Abraços... Compartilhar este post Link para o post Compartilhar em outros sites
caezar 0 Denunciar post Postado Janeiro 27, 2010 Você esta usando componente DataSource? Daqueles que são criados no html? Abraços... Estou usando o DataSource direto no GridView, acredito que o código seja só no html... Abs Compartilhar este post Link para o post Compartilhar em outros sites
quintelab 91 Denunciar post Postado Janeiro 28, 2010 De uma olhada neste artigo: http://www.macoratti.net/aspn2_gv.htm Abraços... Compartilhar este post Link para o post Compartilhar em outros sites
caezar 0 Denunciar post Postado Janeiro 29, 2010 De uma olhada neste artigo: http://www.macoratti.net/aspn2_gv.htm Abraços... Amigo, já tinha lido tal artigo! Desta forma eu já fazia, o que preciso é que o usuário só possa alterar as colunas Templates que possuam os txtBox e para isso ele não precise selecionar a linha com um Select, ele altera o valor dos gols e de botão nas teria mesmo só o SALVAR que coloquei em outra coluna template. abs e obrigado Compartilhar este post Link para o post Compartilhar em outros sites
quintelab 91 Denunciar post Postado Janeiro 29, 2010 Os que eu fiz e os exemplos na net são sempre usando o botão de editar, vou ficar devendo essa. Abraços... Compartilhar este post Link para o post Compartilhar em outros sites
caezar 0 Denunciar post Postado Janeiro 30, 2010 Os que eu fiz e os exemplos na net são sempre usando o botão de editar, vou ficar devendo essa. Abraços... Vou mostrar uma imagem da tabela para clarear a idéias: Compartilhar este post Link para o post Compartilhar em outros sites
Ivan.Teles 23 Denunciar post Postado Fevereiro 2, 2010 Vamos ver se eu entendi, Eu como usuario logado do seu sistema entro e vejo essa tela ai eu coloco o resultado e clico em gravar, quando eu clicar você quer pegar esses dois valores que informeu e gravar em uma tabela. onde tera o ID desse jogo, e mais os dois resultados que eu estou informado. É isso? Compartilhar este post Link para o post Compartilhar em outros sites
caezar 0 Denunciar post Postado Fevereiro 2, 2010 Vamos ver se eu entendi, Eu como usuario logado do seu sistema entro e vejo essa tela ai eu coloco o resultado e clico em gravar, quando eu clicar você quer pegar esses dois valores que informeu e gravar em uma tabela. onde tera o ID desse jogo, e mais os dois resultados que eu estou informado. É isso? Exato!Exatamente! Eu(USUÁRIO) entro nessa pagina me logando. O Cod do Usuário fica numa session. A Tabela mostra todos os jogos e com a session eu as apostas que eu fiz. Dai eu posso tanto alterar o gols nas textBox como preencher as que estão vazias e conforme marco o resultado ele joga os valores para a tblAposta retomando o codJogo que esta oculto na tabela, os valores nos textBox e o codUser da session. abs Compartilhar este post Link para o post Compartilhar em outros sites
Ivan.Teles 23 Denunciar post Postado Fevereiro 2, 2010 Então.. seta esse botão como select e no Evento RowSelected você executa a ação! Compartilhar este post Link para o post Compartilhar em outros sites
caezar 0 Denunciar post Postado Fevereiro 3, 2010 Então.. seta esse botão como select e no Evento RowSelected você executa a ação! Então não quero que o usuário possa selecionar a linha. Como ele fica livre para mexer nos textbox quero que ele altere ou adicione seu resultados e depois aperte o botão gravar. Pensei em algo como a dica que você me deu no outro post: Protected Sub Grava(ByVal TipoQ As Boolean, ByVal CODI As Integer, ByVal GV As Integer, ByVal GM As Integer) Dim queryStr As String If TipoQ = True Then queryStr = "Update tblAposta Set GolsV=" & GV & " GolsM=" & GM & " where (codJogo=" & CODI & ") and (codUser=" & Session("COD_USUARIO") & ")" End If End Sub Eu chamaria mais o menos da forma abaixo: <asp:Button ID="Gravar" runat="server" Text="Gravar" onclientclick='<%# Grava(True, Eval("codJogo"),x,y) %>' /> Mas não sei como pegar o valor dos textbox (Que seria onde eu marquei x e y) e tambem nem sei se daria certo desta forma! O que você acha??? Compartilhar este post Link para o post Compartilhar em outros sites
Ivan.Teles 23 Denunciar post Postado Fevereiro 3, 2010 Cezar, da pra fazer sim, sem usar o selecionar, deixa eu te passar a logica e você tentar fazer, pois seu eu te passar pronto você não aprende. Cada linha do grid tem um Index, então você cria um metodo que recebe esse Index, e o ID a ser atualizado. Com esse Index, você deve fazer um findControl dentro das rows do seu GRId pra poder pegar os valores informados, dentro dos textbox, e depois realiza o Update. Para passar Index se não me engano é algo Container.ItemIndex Qualquer coisa posta ae! Compartilhar este post Link para o post Compartilhar em outros sites
caezar 0 Denunciar post Postado Fevereiro 3, 2010 Cezar, da pra fazer sim, sem usar o selecionar, deixa eu te passar a logica e você tentar fazer, pois seu eu te passar pronto você não aprende. Cada linha do grid tem um Index, então você cria um metodo que recebe esse Index, e o ID a ser atualizado. Com esse Index, você deve fazer um findControl dentro das rows do seu GRId pra poder pegar os valores informados, dentro dos textbox, e depois realiza o Update. Para passar Index se não me engano é algo Container.ItemIndex Qualquer coisa posta ae! O metodo para receber o index seria igual ao que eu fiz, baseado no seu metodo para validar a Data, nesse método eu retomo o codJogo pelo Eval, como mostrei a cima. Até aqui tudo certo? Eu criei o campo TipoQ, que caso seja true eu escuto um Update, caso false excuto um Insert. Eu tentei desta forma como mostrei mas ele apresentou um erro e tambem não sei como retomar o valor de dentro do textbox! o findControl eu uso com o nome do textbox ou da coluna do grid? Abs Compartilhar este post Link para o post Compartilhar em outros sites
Ivan.Teles 23 Denunciar post Postado Fevereiro 3, 2010 Cara agora mais a tarde (15:30) eu vou postar um exemplo pra você! Compartilhar este post Link para o post Compartilhar em outros sites
caezar 0 Denunciar post Postado Fevereiro 3, 2010 Cara agora mais a tarde (15:30) eu vou postar um exemplo pra você! To no aguardo!! Obrigado Compartilhar este post Link para o post Compartilhar em outros sites
Ivan.Teles 23 Denunciar post Postado Fevereiro 3, 2010 Cezar, você terá q utiliza o evento RowCommand do GridView, na página aspx.cs. Protected Sub GridViewU_RowCommand(sender As Object, e As GridViewCommandEventArgs)<BR>If e.CommandName = "upd" Then<BR> Dim ids As String() = e.CommandArgument.ToString().Split(Convert.ToChar(","))<BR> Dim tb1 As var = DirectCast(GridViewU.Rows(Integer.Parse(ids(0))).FindControl("Campo1"), TextBox)<BR> Dim tb2 As var = DirectCast(GridViewU.Rows(Integer.Parse(ids(0))).FindControl("Campo2"), TextBox)<BR> Dim sql As String = String.Format("UPDATE tabela SET campo1 = '{0}', campo2 = '{1}' WHERE id = {2}", tb1.Text, tb2.Text, ids(1))<BR> Response.Write(sql)<BR>End If<BR>End Sub e no template do grid <ItemTemplate> <BR> <asp:TextBox ID="campo1" runat="server" /><BR> <asp:TextBox ID="campo2" runat="server" /> <BR> <asp:Button runat="server" CommandName="upd" CommandArgument='<%# string.Format("{0},{1}", Container.DataItemIndex, Eval("id")) %>'>Gravar</asp:Button><BR></ItemTemplate> Compartilhar este post Link para o post Compartilhar em outros sites
caezar 0 Denunciar post Postado Fevereiro 4, 2010 Cezar, você terá q utiliza o evento RowCommand do GridView, na página aspx.cs. Protected Sub GridViewU_RowCommand(sender As Object, e As GridViewCommandEventArgs)<BR>If e.CommandName = "upd" Then<BR> Dim ids As String() = e.CommandArgument.ToString().Split(Convert.ToChar(","))<BR> Dim tb1 As var = DirectCast(GridViewU.Rows(Integer.Parse(ids(0))).FindControl("Campo1"), TextBox)<BR> Dim tb2 As var = DirectCast(GridViewU.Rows(Integer.Parse(ids(0))).FindControl("Campo2"), TextBox)<BR> Dim sql As String = String.Format("UPDATE tabela SET campo1 = '{0}', campo2 = '{1}' WHERE id = {2}", tb1.Text, tb2.Text, ids(1))<BR> Response.Write(sql)<BR>End If<BR>End Sub e no template do grid <ItemTemplate> <BR> <asp:TextBox ID="campo1" runat="server" /><BR> <asp:TextBox ID="campo2" runat="server" /> <BR> <asp:Button runat="server" CommandName="upd" CommandArgument='<%# string.Format("{0},{1}", Container.DataItemIndex, Eval("id")) %>'>Gravar</asp:Button><BR></ItemTemplate> Olha aprender eu to aprendendo mesmo! Alterei algumas coisas para fazer o código funcionar e ficou assim: Protected Sub GridView3_RowCommand(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewCommandEventArgs) If e.CommandName = "upd" Then Dim ids As String() = e.CommandArgument.ToString().Split(Convert.ToChar(",")) Dim tb1 As TextBox = DirectCast(GridView3.Rows(Integer.Parse(ids(0))).FindControl("TextBox3"), TextBox) Dim tb2 As TextBox = DirectCast(GridView3.Rows(Integer.Parse(ids(0))).FindControl("TextBox4"), TextBox) Dim sql As String = String.Format("UPDATE tabela SET campo1 = '{0}', campo2 = '{1}' WHERE id = {2} and idUser= {3}", tb1.Text, tb2.Text, ids(1), Session("COD_USUARIO")) Response.Write(sql) End If End Sub Mudei na variavel que coloquei do tipo TextBox e adaptei para os meus campos... E o asp ficou assim: <asp:TemplateField> <ItemTemplate> <asp:Button ID="Gravar" runat="server" Text="Gravar" CommandArgument='<%# string.Format("{0},{1}", Container.DataItemIndex, Eval("codJogo")) %>' CommandName="upd" /> </ItemTemplate> </asp:TemplateField> Quase perfeito se não fosse um ultimo problema: Funcio perfeito clico no gravar e ele monta a str perfeito, mas quando eu mudo a pagina pelo pager (Exemplo: Clico no numero 2 do paginador) ocorre o seguinte erro: Descrição: Ocorreu uma exceção não tratada durante a execução da atual solicitação da Web. Examine o rastreamento de pilha para obter mais informações sobre o erro e onde foi originado no código. Detalhes da Exceção: System.ArgumentOutOfRangeException: O índice estava fora do intervalo. Ele deve ser não-negativo e menor que o tamanho da coleção. Nome do parâmetro: index Erro de Origem: Linha 39: If e.CommandName = "upd" Then Linha 40: Dim ids As String() = e.CommandArgument.ToString().Split(Convert.ToChar(",")) Linha 41: Dim tb1 As TextBox = DirectCast(GridView3.Rows(Integer.Parse(ids(0))).FindControl("TextBox3"), TextBox) Linha 42: Dim tb2 As TextBox = DirectCast(GridView3.Rows(Integer.Parse(ids(0))).FindControl("TextBox4"), TextBox) Linha 43: Dim sql As String = String.Format("UPDATE tabela SET campo1 = '{0}', campo2 = '{1}' WHERE id = {2} and idUser= {3}", tb1.Text, tb2.Text, ids(1), Session("COD_USUARIO")) Alguma idéia do que possa ser?? abs Compartilhar este post Link para o post Compartilhar em outros sites
Ivan.Teles 23 Denunciar post Postado Fevereiro 4, 2010 Tenta mudar: If e.CommandName = "upd" Then para If e.CommandName = "upd" AndAlso e.CommandArgument.ToString().Length > 0 Then Desculpa ai os erros nos códigos é que eu escrevo em C# e converto pra VB na net! Compartilhar este post Link para o post Compartilhar em outros sites
caezar 0 Denunciar post Postado Fevereiro 4, 2010 Tenta mudar: If e.CommandName = "upd" Then para If e.CommandName = "upd" AndAlso e.CommandArgument.ToString().Length > 0 ThenDesculpa ai os erros nos códigos é que eu escrevo em C# e converto pra VB na net! Que é isso!! Eu agraço muito, chegando em casa vou testar!!! Obrigado Compartilhar este post Link para o post Compartilhar em outros sites
caezar 0 Denunciar post Postado Fevereiro 4, 2010 Tenta mudar: If e.CommandName = "upd" Then para If e.CommandName = "upd" AndAlso e.CommandArgument.ToString().Length > 0 ThenDesculpa ai os erros nos códigos é que eu escrevo em C# e converto pra VB na net! Que é isso!! Eu agraço muito, chegando em casa vou testar!!! Obrigado Mesmo erro! rs "O índice estava fora do intervalo. Ele deve ser não-negativo e menor que o tamanho da coleção. Nome do parâmetro: index" Compartilhar este post Link para o post Compartilhar em outros sites