none
Campos do repeater retornam valores em branco ao salvar RRS feed

  • Discussão Geral

  • Estou exibindo o resultado de uma tabela em um repeater para edição, acontece que ele exibe corretamente, mas quando tento usar dados digitados pelo usuário ele simplesmente ignora e não salva o novo valor no bd.

    .ASPX

    <asp:SqlDataSource ID="SqlEditPeriodo" runat="server" 
                ConnectionString="<%$ ConnectionStrings:vbd %>" 
                ProviderName="<%$ ConnectionStrings:vbd.ProviderName %>" 
                >
            </asp:SqlDataSource>
            
            <asp:Repeater ID="rpEditPeriodo" runat ="server"   Visible="False" >
            
            <HeaderTemplate>
            
                  <table width="80%" border="0" cellspacing="4" cellpadding="4"  id="dataTable" class="TabLancametos">
    
            <thead>
                <tr>
                    <th>Edit</th>
                    <th>Mês</th>
                    <th>Remuneração</th>
                </tr></thead>
            
          
                         
            </HeaderTemplate>
    
            
            <ItemTemplate> 
        
          <tbody><tr>
          <td><asp:TextBox ID="txtano" runat="server" Text='<%# cdate(eval ("periodo")).Year %>' Enabled="false" ></asp:TextBox></td>
          <td><asp:TextBox ID="txtmes" runat="server" Text='<%# cdate(eval ("periodo")).tostring("MMMM") %>' Enabled="false"></asp:TextBox></td>
          <td><asp:TextBox ID="txtremEdit" runat="server"  ></asp:TextBox></td>
          <td><asp:TextBox ID="TextBox1" runat="server"></asp:TextBox></td>
          </tr></tbody>
    
           
                        
            </ItemTemplate>
                
    
            <footerTemplate>
                
                </table>
    
                
    
                </footerTemplate>
                
            </asp:Repeater>
    
    
    <asp:Button runat="server" Text="Button" id="btn1"/>
    

    Code Behind

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    
            Dim vprotocolo As String = "201294736632"
            rpEditPeriodo.Visible = True
    
    
            SqlEditPeriodo.SelectCommand = "Select * from ctc_rem where protocolo = '" & vProtocolo & "' order by periodo asc"
            rpEditPeriodo.DataSource = SqlEditPeriodo
            rpEditPeriodo.DataBind()
    
        End Sub
    
        Private Sub insertEdit(ByVal protocolo As String)
    
    
            For Each item As RepeaterItem In rpEditPeriodo.Items
                Dim ano As TextBox = DirectCast(item.FindControl("txtano"), TextBox)
                Dim mes As TextBox = DirectCast(item.FindControl("txtmes"), TextBox)
                Dim vrem = item.FindControl("txtremEdit")
                Dim x1 As TextBox = DirectCast(item.FindControl("TextBox1"), TextBox)
    
    
    
                Dim dataconvert As Date = "1/" & Convert.ToDateTime("1/" & mes.Text & "/" & ano.Text).Month & "/" & ano.Text
                Dim datarem As String = Replace(dataconvert, "-", "/")
    
    
    
                'Insere valores na tabela ctc_rem'
                SqlEditPeriodo.SelectCommandType = SqlDataSourceCommandType.Text
                SqlEditPeriodo.UpdateCommand = " " _
                & "UPDATE ctc_rem SET " _
                & "protocolo = '" & protocolo & "', " _
                & "periodo = '" & Format(CDate(dataconvert), "yyyy-MM-dd") & "', dataatual = '" & Format(CDate(Now()), "yyyy-MM-dd") & "', " _
                & "entidade='" & Request.Cookies("xentidade").Value & "', servidor = '" & Request.QueryString("c") & "', " _
                & "rem = '" & x1.Text & "' WHERE protocolo = '" & protocolo & "' "
    
                SqlEditPeriodo.Update()
    
    
            Next
    
    
    
        End Sub
    
        Protected Sub btn1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btn1.Click
            insertEdit("201294736632")
        End Sub

    quero que o usuario possa alterar os textbox que contém os valores ("rem").


    Alebarros

    segunda-feira, 26 de novembro de 2012 00:51

Todas as Respostas

  • Alessandro,

    Acho que você deve informar o UpdateCommand juntamente a declaração do SqlDataSource, veja este tutorial:

    http://stonecoastwebdesign.com/code/EditRepeater.aspx

    Vitor Mendes | Seu feedback é muito importante para todos!
    Visite o meu site: http://www.vitormendes.com.br/

    segunda-feira, 26 de novembro de 2012 11:30
  • Infelismente ficou a mesma coisa, estranho que tenho este codigo em outra pagina funcionando, nao entendo porque agora acontece assim.

    poderia testar ver se acontece o mesmo?


    Alebarros

    segunda-feira, 26 de novembro de 2012 16:24
  • Ola, então nunca utilize o codigo dessa forma que você esta usando na verdade o formato de gravação, mas ver se consigo te ajudar

            Dim cmd = new OleDbCommand();
            cmd.Connection = cn
            cmd.CommandType = CommandType.Text
            cmd.CommandText = ""
            cmd.CommandText += "UPDATE ctc_rem SET "
            cmd.CommandText += "protocolo = '" & protocolo & "',"
            cmd.CommandText += "periodo   = '" & Format(CDate(dataconvert), "yyyy-MM-dd") & "',"
            cmd.CommandText += "dataatual = '" & Format(CDate(Now()), "yyyy-MM-dd") & "',"
            cmd.CommandText += "entidade  = '" & Request.Cookies("xentidade").Value & "',"
            cmd.CommandText += "servidor  = '" & Request.QueryString("c") & "',"
            cmd.CommandText += "rem = '" & x1.Text & "' "
            cmd.CommandText += "WHERE protocolo = '" & protocolo & "'"
            cmd.ExecuteNonQuery()

    Eu sempre utilizo o codigo nesse formato para gravar registros seja Insert / Update / Delete, você declara a variavel tipo OledbCommand fora do seu laço juntamente com a linha de conexão com o Banco de Dados e o CommandType dentro do laço você coloca somente o cmd.CommandText = "" e o cmd.CommandText = "update ....", dessa forma o laço executara todo o seu UPDATE, mas outra coisa você ja colocu um breakpoint e pegou o resultado do seu UPDATE para ver como ele esta sendo montado ? Você ainda pode na linah do cmd.ExecuteNoQuery verificar se a instrução afetou registros e realizar um teste para validar nesses casos eu uso ate controle de transação pois se durante meu UPDATE dentro de um laço digamos que meu 5 UPDATE falhar eu desfaço toda a transação. Não sei se ajuda muito mas faz um teste ai


    Junior

    terça-feira, 27 de novembro de 2012 22:21
  • Fiz desta forma também, o problema não está na gravação e sim que não consigo resgatar os dados colocados nos Textbox do repeater.

    Quando o usuario digita qualquer valor no textbox ele simplesmente ignora, mas se eu atribuir um valor ao textbox no code antes da gravação ele aceita. Mesmo fazendo um response.write do campo ele não mostra nada.


    Alebarros

    quarta-feira, 28 de novembro de 2012 10:55
  • Eu nunca usei o repeater mas ja montei gridview em que algumas colunas eram textboxs com valores a serem alterados pelo usuario e depois atraves da ação de um button realizava a gravação dos registros da grid

        protected void btnGravar_Click(object sender, EventArgs e)
        {
            string sQtdade = "";
            string sValor = "";
            cmd = new OleDbCommand();
            cmd.Connection = cn;
            foreach (GridViewRow row in Grid.Rows)
            {
                sQtdade = "";
                sValor = "";
                sQtdade = ((TextBox)row.Cells[2].Controls[1]).Text;
                sValor = ((TextBox)row.Cells[3].Controls[1]).Text;
                cmd.CommandText = "";
                cmd.CommandText = "UPDATE COTACAO SET QTDADEPROD = " + sQtdade.Replace(",",".") + ", VALORPROD = " + sValor.Replace(",",".") + "
    WHERE CODPROD = "
    + row.Cells[0].Text;
                cmd.ExecuteNonQuery();
           
    }
        }

    Tenta usar esse codigo como exemplo para ver se te ajuda pois com esse codigo fiz a alteração dos dados registros usando dados contidos nos campos da pagina dentro da grid ou seja dos textboxs


    Junior

    quarta-feira, 28 de novembro de 2012 13:06
  • Optei pelo repeater porque quero alterar os valores por coluna, tem como fazer isso no gridview? Aterar todos os valores de uma determinada coluna e depois em um buttom fora do grid salvar tudo?

    Alebarros

    quarta-feira, 28 de novembro de 2012 16:26
  • Tem sim você pode criar um gridview com uma ou mais colunas do tipo template e inserir textbox dentro dessa(s) coluna(s) você tera que realizar validações nos campos é claro e pode usar aquele codigo que te passei no post acima eu usei isso ja utilizando posts encontrados na net e ficou muito bom, para falar a verdade somente ate hoje não consegui me acertar um "probleminha" de foco em campo pois quando saio de um campo e jogo para o proximo em alguns casos o foco volta para o campo origem, mas olha ate agora funciona perfeitamente.

    Junior

    quarta-feira, 28 de novembro de 2012 22:13