Ir para conteúdo

Arquivado

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

caezar

[Resolvido] Pagina de Apostas, Sistema de bolão!

Recommended Posts

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

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

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

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:

Imagem Postada

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

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

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

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

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

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

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

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

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!

 

Que é isso!!

Eu agraço muito, chegando em casa vou testar!!!

 

Obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

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!

 

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

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.